딥러닝 모델: 파이토치(71)
-
Pytorch로 시작하는 딥러닝 입문(07-05. 문자 단위 RNN: 더 많은 데이터)
더 많은 데이터 문자 단위 RNN 구현하기 ♣ 훈련 데이터 처리하기 문서 집합을 생성하고, 각 문자에 고유한 정수를 부여한다. 각 문자에 정수가 부여되었으며 총 25개의 문자가 존재한다. 하이퍼파라미터를 설정한다. hidden_size(은닉 상태의 크기)를 입력의 크기와 동일하게 하였는데 다른 값을 주어도 무방하다. 앞서 만든 샘플을 10개 단위로 끊어서 샘플을 만들 예정이기 때문에 sequence_length 라는 변수를 10으로 선언한다. 임의로 지정한 sequence_length 값인 10의 단위로 샘플들을 잘라서 데이터를 만든다. 총 170개의 샘플이 생성되었다. 각 샘플의 각 문자들은 고유한 정수로 인코딩 된 상태이다. x_data[0] 는 if you wan 에 해당한다. y_da..
2024.06.25 -
Pytorch로 시작하는 딥러닝 입문(07-04. 문자 단위 RNN: Char RNN)
모든 시점의 입력에 대해서 모든 시점에서 출력을 하는 다대다 RNN ♣ 문자 단위 RNN입출력의 단위를 단어 레벨이 아니라 문자 레벨로 하여 RNN을 구현한 것을 문자 단위 RNN이라고 한다. RNN 구조는 같지만 입, 출력의 단위가 문자로 바뀌었을 뿐이다. 필요한 도구 import 하기 훈련 데이터 전처리하기문자 시퀀스 apple을 입력받으면 pple!를 출력하는 RNN을 구현한다. RNN의 동작을 이해하는 것이 목적이다. 입력 데이터와 레이블 데이터에 대해서 문자 집합(vocabulary)를 만든다. 이 문자 집합은 중복을 제거한 문자들의 집합이다. 현재 문자 집합에는 총 5개의 문자가 있다. !, a, e, l, p이다. 이제 하이퍼파라미터를 정의하는데, 이때 입력은 원-핫 벡터를 사용할 것이므로..
2024.06.24 -
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