전체 글(131)
-
Pytorch로 시작하는 딥러닝 입문(07-03. 게이트 순환 유닛(Gated Recurrent Unit: GRU))
♣ GRUGRU는 LSTM과 유사하면서도 복잡했던 LSTM의 구조를 단순화했다. LSTM에는 입력, 삭제, 출력이라는 3개의 게이트가 존재했다. 반면 GRU에서는 업데이트 게이트와 리셋 게이트 두 가지 게이트만 존재한다. GRU는 LSTM보다 학습 속도가 빠르다고 알려져있지만 여러 평가에서 LSTM과 비슷한 성능을 보인다고도 알려져있다. GRU와 LSTM 중 어떤 것이 성능면에서 더 낫다고 단정지어 말할 수 없다. 데이터 양이 적을 때는 매개 변수의 양이 적은 GRU가 조금 더 낫고, 데이터 양이 많으면 LSTM이 더 낫다고도 한다. ♣ 파이토치의 nn.GRU( )기존의 RNN 셀을 사용했을 때와 비교하면 GRU는 아래와 같이 사용한다.
2024.06.23 -
Pytorch로 시작하는 딥러닝 입문(07-02. 장단기 메모리(Long Short-Term Memory: LSTM))
♣ 바닐라 RNN(기본 RNN)의 한계바닐라 RNN은 비교적 짧은 시퀀스에 대해서만 효과를 보인다. time step이 길어질수록 앞의 정보가 뒤로 충분히 전달되지 못하는 현상이 발생한다. 위의 그림은 첫 번째 입력값인 x1이 뒤로 갈수록 색이 점점 옅어지는 것으로 정보량이 손실되어 가는 것을 의미한다. 가장 중요한 정보가 시점의 앞쪽에 위치한다면 바닐라 RNN에서는 엉뚱한 출력값을 내놓을 수 있다. 이를 장기 의존성 문제(the problem of Long-Term Dependencies)라고 한다. ♣ 바닐라 RNN 내부 탐색하기 위 그림은 바닐라 RNN의 내부 구조이다(편향 b는 생략). 바닐라 RNN은 xt와 ht-1 이라는 두 개의 입력이 각각의 가중치와 곱해져서 메모리 셀의 입력이 된..
2024.06.23 -
Pytorch로 시작하는 딥러닝 입문(07-01. 순환 신경망, 양방향 순환 신경망(Bidirectional Recurrent Neural Network))
양방향 순환 신경망은 시점 t에서의 출력값을 예측할 때 이전 시점의 데이터뿐만 아니라 이후 데이터로도 예측할 수 있다는 아이디어에 기반한다. 영어 빈칸 채우기 문제에 비유하면 빈칸의 앞부분과 뒷부분이 모두 있어야 답을 풀 수 있는 것과 비슷하다. 양방향 RNN은 하나의 출력값을 예측하기 위해 기본적으로 두 개의 메모리 셀을 사용한다. 첫 번째 메모리 셀은 앞에서 배운 것처럼 앞 시점의 은닉 상태(forward states)를 전달받아 현재의 은닉 상태를 계산한다. 주황색이 앞 시점의 은닉 상태를 전달받은 셀이다. 두 번째 메모리 셀은 뒤 시점의 은닉 상태를 전달 받아 현재의 은닉 상태를 계산한다. 초록색 메모리 셀에 해당한다. 두 개의 값이 모두 출력값을 예측하기 위해 사용된다. 양방향 RNN도 ..
2024.06.23 -
Pytorch로 시작하는 딥러닝 입문(07-01. 순환 신경망, 깊은 순환 신경망(Deep Recurrent Neural Network))
RNN도 다수의 은닉층을 가질 수 있다. 아래 그림은 순환 신경망에서 은닉층이 1개 더 추가되어 은닉층이 2개인 깊은 순환 신경망의 모습을 보여준다. 첫 번째 은닉층은 다음 은닉층에 모든 시점에 대해서 은닉 상태값을 보내주고 있다. 깊은 순환 신경망을 파이토치로 구현할 때는 nn.RNN( )의 인자인 num_layers에 값을 전달하여 층을 쌓는다. 아래는 층이 2개인 깊은 순환 신경망의 예시이다. 첫 번째 리턴값인 outputs의 크기는 층이 한 개였던 RNN 셀 때와 달라지지 않았다. 이는 마지막 층의 모든 시점의 은닉 상태들을 보여준다. 위의 형태를 보면 첫 번째 행은 첫 번째 input이 두 번째 layer까지를 통과하면서 얻은 은닉 상태이다. 이 시점에서는 아직 다른 input들은 layer..
2024.06.23 -
분할정복(백준 알고리즘 5904번)
♣ 문제 이해 moo 수열이 규칙에 따라 반복되는데, 주어진 n번째 글자가 m인지 o인지를 판별하는 문제이다. ♣ 문제 해결분할정복으로 분류되어 있지만 마치 DP처럼 풀었다. 어떤 부분에서 분할정복과 DP를 구분할 수 있는지 잘 모르겠다. DP처럼 함수를 만드는데, 조건을 네 가지로 나누어서 코드를 구성하였다. 1. 예외 처리n이 3과 같거나 작아서 0번째 Moo 수열에서 판별이 가능할 때 2. 예외 처리가 되지 않을 때는 이전 단계의 Moo 수열의 길이, 중간에 들어갈 m + o *(k+2) 의 길이, 이번 단계의 Moo 수열의 길이를 이용하여 세 가지 경우로 나눈다. 2-1. n이 이전 단계의 Moo 수열의 길이보다 작거나 같을 때. 이전 단계에서도 구할 수 있으므로 k-1 단계에서의 Moo..
2024.06.20 -
언어 처리 패키지(NLTK, KoNLPy)
♣ NLTK자연어 처리를 위한 파이썬 패키지. NLTK의 기능을 제대로 사용하기 위해서 NLTK Data라는 데이터를 추가적으로 설치해야 한다. ♣ KoNLPy코엔엘파이는 한국어 자연어 처리를 위한 형태소 분석기 패키지이다. ♣ 코드https://colab.research.google.com/drive/10_HDv-KQZPKftoo8AyKoLk2u045gJXK8#scrollTo=kmccgf9QaknX NLTK와 KoNLPy.ipynbColab notebookcolab.research.google.com
2024.06.06