일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Stream
- 영상처리
- Got
- BOF
- ARM
- rao
- Dreamhack
- BAEKJOON
- llm을 활용 단어장 앱 개발일지
- C++
- MATLAB
- Kaggle
- MDP
- system hacking
- 백준
- fastapi를 사용한 파이썬 웹 개발
- bloc
- FastAPI
- Image Processing
- Flutter
- PCA
- ML
- Widget
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- pytorch
- DART
- Computer Architecture
- Algorithm
- study book
- BFS
- Today
- Total
Bull
[DL] RNN (Recurrent Neural Network) | study books 본문
[DL] RNN (Recurrent Neural Network) | study books
Bull_ 2024. 9. 28. 14:57RNN (Recurrent Neural Network)
RNN 특징
- 연속적인 데이터를 처리하는데 적합한 구조
- 각 시점의 데이터가 이전 데이터와 독립적이지 않다
- 1~1000까지 (1,2,3) , ... , (998,999,1000)을 학습 시켜 11,12를 입력하면 13.0023 등이 나오도록 예측하는 것이다.
- 긴 문장일수록 강한 상관관계가 존재
- 시계열, 자연어, 음성 인식, 기타 시퀀스 데이터
RNN 구조
- 연속형 데이터를 순서대로 입력 받아 처리하며 각 시점마다 은닉 상태 형태로 저장
수식
은닉 상태
$$ h_t = \sigma (h_{t-1},x_t) $$
$$ h_t = \sigma (W_{hh}h_{t-1} + W_{xh}x_t+b_h) $$
- $\sigma_h$ : 은닉 상태를 계산하기 위한 활성화 함수
이전 시점 $t-1$ 의 은닉상태 $h_{t-1}$ 과 현재 입력값 $x_t$를 받아 현재 은닉상태를 계산 - $h_{t-1}$ : 이전 은닉 상태
- $W_{hh}$ : $h_{t-1}$ 에 대한 가중치
- $W_{xh}$ : 입력값 $x_t$에 대한 가중치
- $b_h$ : 은닉상태 편향
- 초기 은닉 상태 $h_0$이전의 타임 스텝은 보통 0을 사용한다.
출력 값
$$ y_t = \sigma_y(h_t)$$
$$ y_t = \sigma_y (W_{hy}h_t+b_y)$$
- $\sigma_y$ : 출력 상태를 계산하기 위한 활성화 함수
- $W_{hy}$ : 현재 시점 은닉상태 $h_t$에 대한 가중치
- $b_y$ : 출력 값 $y_t$의 편향값
일대다 구조
- 하나의 입력 시퀀스에 대해 여러 개 출력값을 생성하는 순환 신경망 구조
- 예를 들어
- 문장을 입력 받고 각 단어의 품사를 예측하는 작업, 입력 시퀀스는 문장, 출력 시퀀스는 단어의 품사
- 이미지 캡셔닝 모델, 입력 시퀀스는 이미지, 출력 시퀀스는 이미지 관련 설명 문장들
다대일 구조
- 여러 개의 입력 시퀀스에 대해 하나의 출력 값을 생성하는 순환 신경망
- 예를들어
- 문장의 감정을 예측하는 작업, 입력 시퀀스는 문장, 출력 시퀀스는 문장의 감정(긍정,부정 등)
다대다 구조
- 입력 시퀀스와 출력 시퀀스의 길이가 여러 개인 경우 사용되는 순환 신경망
- 예를 들어
- 입력 문장에 대해 번역된 출력 문장을 생성하는 번역기
- 음성 인식 시스템에서 음성 신호를 입력으로 받아 문장을 출력하는 음성 인식기
- Seq2Seq 구조, 입력 시퀀스인 인코더와 출력 시퀀스인 디코더로 구성된다
BiRNN (Bidirectional RNN)
- 양방향 순환신경망
- RNN은 이전 시점의 은닉 상태를 이용하는데 BiRNN은 이전 시점 은닉 상태 뿐만 아니라 이후 시점의 은닉 상태도 함께 이용
- t-1, t+1을 동시에 참고하는 것이 아닌 t-1을 참고하여 만든 것과 t+1을 참고하여 만든 것 2개를 만든다. 순서는 순방향을 모두 다하고 역방향을 진행함.
- 예를들어
- "인생은 B와_ 사이의 C다." 라는 문장에서 "_"를 예측,
"인생의 B"라는 문장만 봐서는 어려우므로 양측 모두를 고려.
- "인생은 B와_ 사이의 C다." 라는 문장에서 "_"를 예측,
Stacked RNN
- 다중 순환 신경망
- 여러 개의 RNN을 연결하여 구성한 모델, 퍼셉트론도 은닉층이 1개이지만 다층 퍼셉트론은 퍼셉트론을 여러 개 쌓아 올린 개념과 동일.
CODE : RNN
RNN class
rnn = torch.nn.RNN(
input_size,
hidden_size,
num_layers=1,
nonliearity="tanh",
bias=False,
batch_first=True,
dropout=0,
bidirectional=False
)
input_size
: 입력 피쳐 크기hidden_size
: 은닉 상태 크기num_layers
: RNN 층 수, 2이상 이면 Stacked RNNbatch_first
: 입력 배치 크기를 첫 번째 차원으로 사용할 지 유무
True - [배치 크기, 시퀀스 길이, 입력 특성 길이]
False - [시퀀스 길이, 배치 크기, 입력 특성 길이]
RNN 피쳐별 크기
import torch
from torch import nn
input_size = 128
ouput_size = 256
num_layers = 3
bidirectional = True
model = nn.RNN(
input_size=input_size,
hidden_size=ouput_size,
num_layers=num_layers,
nonlinearity="tanh",
batch_first=True,
bidirectional=bidirectional,
)
# 4문장씩 학습시킨다고 생각
batch_size = 4
# RNN 연결 고리라고 생각
sequence_len = 6
inputs = torch.randn(batch_size, sequence_len, input_size)
h_0 = torch.rand(num_layers * (int(bidirectional) + 1), batch_size, ouput_size)
outputs, hidden = model(inputs, h_0)
# [배치 크기, 시퀀스 길이, (양방향여부+1) X 출력 크기]
print(outputs.shape) # torch.Size([4, 6, 512])
# [계층 수 x (양방향 여부+1), 배치 크기, 출력 크기]
print(hidden.shape) # torch.Size([6, 4, 256])
참고 자료
https://product.kyobobook.co.kr/detail/S000209621433
파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 윤대희 - 교보문고
파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 트랜스포머는 딥러닝 분야에서 성능이 우수한 모델로 현대 인공지능 분야의 핵심 기술입니다. 트랜스포머와 비전 트랜스
product.kyobobook.co.kr
'Artificial Intelligence > Deep Learning' 카테고리의 다른 글
[DL] CNN (Convolutional Neural Network) | study books (0) | 2024.10.04 |
---|---|
[DL] LSTM (Long Short-Term Memory) | study books (2) | 2024.09.28 |
[DL] MobileNet 요약 (0) | 2024.08.05 |
[Deep Learning] 코드를 보며 RNN 이해하기 (0) | 2024.05.30 |
[DL/유머] 인공지능이 SoftMax(소맥)먹고 취하는 사진 (1) | 2024.03.17 |