분류 전체보기

    차근차근 이해하는 Transformer(1): Scaled Dot-Product Attention

    지난 글에서 Transformer의 핵심적인 Building Block인 Attention을 정리해봤습니다. 이어서 Vaswani et al. (2017) 논문을 통해 현재 나오는 수 많은 모델의 기반이 되고 있는 Transformer를 차근차근 이해할 수 있도록 정리해보았습니다. Transformer 이전의 Sequential Modeling에는 주로 Recurrent, Convolutional Neural Network 기반의 Encoder-Decoder 구조와 Attention Mechanism이 사용되고 있었습니다. 하지만 논문이 발표된 이후 Transformer는 Sequential Modeling을 완전히 평정한 것은 물론, Computer Vision 등 다양한 도메인에서도 사용되는 등 딥러..

    [Linux] ps 명령어

    [Linux] ps 명령어

    Process Status의 약어를 이름으로 사용한 ps 명령어를 사용하면 현재 구동 중인 프로세스 정보를 확인할 수 있습니다. 명령어와 함께 사용되는 주요 옵션들은 다음과 같습니다. -e: 현재 사용자뿐만 아니라 다른 사용자들이 구동시킨 모든 프로세스를 보여줍니다. (즉, -e 옵션이 없다면 ps 명령어는 현재 사용자(Shell)이 실행 중인 프로세스만 보여줍니다.) -f: 보다 상세한 정보를 보여줍니다. (Full format) -l: -f 보다 더 상세한 정보를 보여줍니다. (Long format) ps -efl 명령어를 통해 출력되는 결과의 각 필드의 의미는 다음과 같습니다. (실행 환경마다 필드의 이름 혹은 출력 순서가 다를 수 있습니다.) F: 프로세스 플래그. 4: used super-use..

    [DL] 쉽게 풀어쓴 Attention Mechanism (2): Luong Attention

    [DL] 쉽게 풀어쓴 Attention Mechanism (2): Luong Attention

    2017년에 등장한 Transformer(Vaswani et al. 2017)는 어느덧 딥러닝의 기본적인 Building Block으로 사용된다고 해도 과언이 아닐 정도로 대중화되었습니다. Transformer를 이해하기 위해 사전 지식으로 필요한 Attention Mechanism의 기본적인 내용을 기록해두고자 Bahdanau, D., Cho, K., & Bengio, Y. (2014)와 Luong, M. T., Pham, H., & Manning, C. D. (2015)를 읽고 정리해보았습니다. 이번 글에서는 지난번 글에 이어 여러 방법을 통해 Bahdanau Attention을 개선할 수 있는 방법에 대해 알아보겠습니다. (지난 글: 2022.04.23 - [Data Science/Maching L..

    [Git] Squash and Merge 후 Rebase를 할 때 발생하는 문제

    [Git] Squash and Merge 후 Rebase를 할 때 발생하는 문제

    Squash and Merge(이하 Squash Merge) 이후 Branch간 충돌로 인해 Rebase가 불가능한 경우가 있습니다. 충돌이 일어나는 이유와 해결 방법을 알아보겠습니다. 문제 상황 우선 Branch1에서 B, C commit 이후 다른 작업을 위해 Branch2를 만든 후 Branch 별로 각기 다른 작업을 진행했다고 가정하겠습니다. Branch1의 작업이 끝나 Squash Merge 후 Main 브랜치를 Fast-Forward했습니다. Branch2도 작업이 끝났습니다. 깔끔한 Commit history를 위해 Rebase를 진행하려고 합니다. git checkout branch2 git rebase main 이렇듯 의식의 흐름대로 Rebase를 진행하면 여러분은 빨간색 글씨로 적힌 충..

    [Linux] 리눅스의 기본 구조: kernel, shell, process and shell session

    평소에 리눅스 계열의 OS를 사용하며 항상 궁금했던 커널, 쉘, 프로세스, 그리고 쉘 세션에 대해서 알아보았습니다. 커널(Kernel) 커널이란 리눅스 운영 체제의 주요 구성 요소 중 하나로 하드웨어와 프로세스를 연결하고 하드웨어의 주요 기능을 제어하는 역할을 합니다. 커널은 주로 메모리 관리, 프로세스 관리, 장치 드라이버, 시스템 호출 및 보안을 수행하고, 사용자에게는 직접적으로 보이지 않습니다. 쉘(Shell) 쉘은 커널과 유저가 Interactive할 수 있도록 만들어진 Interface입니다. 대표적인 쉘로는 bash shell, Z shell(Zsh)이 있으며 이외에도 다양한 CLI(Command-Line Interface)과 GUI(Graphical User Interface)가 존재합니다...

    [DL] 쉽게 풀어쓴 Attention Mechanism (1): Bahdanau Attention

    [DL] 쉽게 풀어쓴 Attention Mechanism (1): Bahdanau Attention

    2017년에 등장한 Transformer(Vaswani et al. 2017)는 어느덧 딥러닝의 기본적인 Building Block으로 사용된다고 해도 과언이 아닐 정도로 대중화되었습니다. Transformer를 이해하기 위해 사전 지식으로 필요한 Attention Mechanism의 기본적인 내용을 기록해두고자 Bahdanau, D., Cho, K., & Bengio, Y. (2014)와 Luong, M. T., Pham, H., & Manning, C. D. (2015)를 읽고 정리해보았습니다. Attention Mechanism의 등장 배경 Attention이 등장하기 이전에는 Encoder와 Decoder로 이루어진 Sequence-to-Sequence(Seq2Seq) 모델을 통해 Sequenti..

    [Github] workflow scope 오류 해결하기

    [Github] workflow scope 오류 해결하기

    Github actions workflows와 관련된 파일을 수정할 때 다음과 같이 without workflow scope 오류가 발생할 수 있습니다. refusing to allow a Personal Access Token to create or update workflow .githubworkflowssomefi.yaml without workflow scope 위 에러는 Token authentication을 위해 Personal access token을 이용할 때 사용중인 Access Token에 workflow를 수정할 수 있는 권한이 없을 경우 발생합니다. 해당 토큰에 workflow 수정 권한을 부여하는 방법은 다음과 같습니다. Settings → Developer Set..

    [Python] 주어진 문자열이 알파벳/숫자로만 구성되었는지 확인해보기

    파이썬에서 주어진 문자열이 알파벳, 숫자, 혹은 알파벳과 숫자로 구성되어있는지 확인하는 메소드는 다음과 같습니다. 문자 판별 isalpha() 메소드를 이용하여 주어진 문자열이 알파벳으로만 구성되어있는지 판별할 수 있습니다. name = "Tom" print(name.isalpha()) # True name = "Tom Holland" print(name.isalpha()) # False (공백 포함) name = "Tom1Holland2" print(name.isalpha()) # False (숫자 포함) 숫자 판별 숫자 판별의 경우 문자 판별에 비해 세분화된 메소드가 제공됩니다. isdecimal() 메소드를 활용하면 문자열이 int로 변환 가능한지 판별할 수 있습니다. isdigit() 메소드를 활..

    [백준 #10809] 단어에 포함된 알파벳의 첫 번째 등장 위치 찾기

    [백준 #10809] 단어에 포함된 알파벳의 첫 번째 등장 위치 찾기

    아스키 코드와 파이썬 문자열 객체의 find 메소드를 사용하여 빠르고 가독성 높이기! (문제 링크: https://www.acmicpc.net/problem/10809) AS-IS word = input() alphabets = list("abcdefghijklmnopqrstuvwxyz") result = [-1] * len(alphabets) for i, s in enumerate(list(word)): if s in alphabets: idx = alphabets.index(s) result[idx] = i alphabets[idx] = None print(" ".join(map(str, result))) TO-BE Background 아스키 코드 아스키 코드란 미국 국립 표준 협회에서 만든 정보교환..

    [Linux] nohup 명령어

    [nohup 명령어를 이용하여 세션 연결이 끊겨도 프로세스가 동작하도록 하기] nohup 명령어는 로그아웃과 같이 터미널과의 세션 연결이 끊기더라도 프로세스가 계속 동작하도록 만들어주는 명령어입니다. 터미널과의 세션 연결이 끊기게되면 리눅스에서 해당 세션에서 실행된 프로세스들에게 HUP(Hang Up) 시그널을 전달하여 프로세스들이 종료되도록 합니다. 이 때 세션이 종료되더라도 계속 실행하고 싶은 프로세스에는 HUP 시그널을 전달하지 않도록(No Hang Up)한다는 의미에서 nohup이라는 명령어 이름이 만들어졌습니다. 기본적인 명령어는 다음과 같습니다. nohup [process] & nohup 명령어를 이용해 실행할 프로세스와 관련된 파일의 권한은 755(rxwrx-rx-) 이상이어야 합니다. 또한..