딥러닝 알고리즘 (DNN,CNN,RNN)

CA·2023년 6월 29일

AI

목록 보기
8/8

📌 DNN

DNN이란 입력층(input layer)과 출력층(output layer) 사이에 여러 개의 은닉층(hidden layer)들로 이뤄진 인공신경망이다. 신경망 출력에 비선형 활성화 함수를 추가하여 복잡한 비선형 관계를 모델링 할 수 있음
출처: https://url.kr/5rj9ag

🔥 Dropout

드랍아웃은 임의의 노드를 일정 확률로 드락(drop)해서 학습에 참여하지 않도록 하는 방법이다. 데이터를 신경망에 통과시키는 과정(Forward Propagation)에서 노드가 생략되므로, 자연스럽게 역전파(Backpropagation)에서도 제외된다.
과적합(Overfitting) 방지용, Train 학습 시에만 사용

DNN 구현

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Dropout
model = Sequential()
model.add(Dense(4,input_shape(3,),activation = 'relu'))
model.add(Dropout(0.2))
model.add(Dense(4,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['acc'])
history = model.fit(X_train,y_train,validation_data=(X_test,y_test),epochs=40,batch_size=10)

📌 CNN

CNN은 Convolutional Neural Networks의 약자로 딥러닝에서 주로 이미지나 영상 데이터를 처리할 때 쓰이며 추출 영역의 Convolution Layer와 Pooling Layer. 클래스 분류 영역의 Fully Connected Layer로 구성되어 있다.
출처: http://taewan.kim/post/cnn/

🔥 Convolutional Filter

Convolutional Filter는 이미지의 특징 추출을 위하여 사용되는 필터이다. 이미지에 필터를 적용시켜 이미지의 세부 특징을 추출해서 학습을 진행한다.
필터는 입력 데이터를 지정한 간격으로 순회하면서 합성곱을 계산한다. 여기서 지정된 간격으로 필터를 순회하는 간격을 Stride라고 하고 아래 첫번째 그림은 strid가 1인 필터이다. 아래 두번째 사진은 strid가 2로 설정된 필터이다.
출처: http://taewan.kim/post/cnn/

🔥 Padding

Convolution 레이어에서 Filter와 Stride에 작용으로 Feature Map 크기는 입력데이터 보다 작게된다. Convolution 레이어의 출력 데이터가 줄어드는 것을 방지하는 방법이 패딩이다. 패딩은 입력 데이터의 외각에 지정된 픽셀만큼 특정 값 0으로 채워 넣는 것을 의미한다. 보통 0으로 넣는다. 출처: http://taewan.kim/post/cnn/

🔥 Pooling Layer

Pooling Layer는 컨볼류션 레이어의 출력 데이터를 입력으로 받아서 출력 데이터(Activation Map)의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용된다. 크기를 줄이더라도 특징들은 변하지 않도록 축소가 진행된다. Pooling Layer를 처리하는 방법으로는 대표적으로 Max Pooling, Average Pooling, Min Pooling이 있다.
출처: http://taewan.kim/post/cnn/

⭐️ CNN의 구성과 구현

from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers import Dense
from keras.layers import Flatten
model = Sequential()
mode.add(Conv2D(12,kernel_size = (5,5), activation = 'relu',input_shape=(120,60,1)))
model.add(MaxPooling2D(pool_size = (2,2)))
model.add(Conv2D(16,kernel_size=(5,5),activation ='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(20,kernel_size=(4,4),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(128,activation='relu'))
model.add(Dense(4,activation='softmax'))

출처: http://taewan.kim/post/cnn/

📌 RNN

순환 신경망(RNN)은 순차 데이터나 시계열 데이터를 이용하는 인공 신경망 유형이다. 이 딥러닝 알고리즘은 언어 변환, 자연어 처리(nlp), 음성 인식, 이미지 캡션과 같은 순서 문제나 시간 문제에 흔히 사용된다. 또한, RNN은 히든 노드가 방향을 가진 엣지로 연결돼 순환구조를 이루는(directed cycle) 인공신경망의 한 종류이다.
녹색 박스는 히든 state. 빨간 박스는 인풋 𝑥, 파란 박스는 아웃풋 𝑦이다. 현재 상태의 히든 state ℎ𝑡는 직전 시점의 히든 state ℎ𝑡−1를 받아 갱신된다. 활성함수(activation function)비선형 함수인 하이퍼볼릭탄젠트(tanh)입니다. 출처: https://ratsgo.github.io/natural%20language%20processing/2017/03/09/rnnlstm/
https://velog.io/@yuns_u/%EC%88%9C%ED%99%98-%EC%8B%A0%EA%B2%BD%EB%A7%9DRNN-Recurrent-Neural-Network

📌 LSTM (Long Short-Term Memory)


RNN의 경우 지점 사이 거리가 멀 경우 역전파시 그래디언트가 점점 줄어 학습능력이 크게 저하하는 vanishing gradient problem이 존재한다.
이 문제를 극복하기 위해 LSTM이 고안되었다. LSTM은 RNN의 히든 state에 cell-state를 추가한 구조이다. 아래 사진에 위쪽이 RNN, 아래쪽이 LSTM를 활용한 것이다. LSTM에는 cell-state와 히든 state로 2개가 존재한다.
LSTM의 장점으로는 오랫동안 정보를 전달할 수 있으며 문장과 같은 단어가 문장 안에서의 순서가 중요한 경우나 주가와 같은 시계열 데이터에 효과가 좋다. 출처: https://ratsgo.github.io/natural%20language%20processing/2017/03/09/rnnlstm/
ex)

#many to one
tf.keras.layers.LSTM(64)
#many to many
tf.keras.layers.LSTM(64,return_sequences=True)
model = Sequential()
mode.add(LSTM(3,input_shape=(8,2),return_sequences=True))
model.add(LSTM(2,return_sequences=True))
model.add(Flatten())
model.add(dense(1,activation='sigmoid'))

0개의 댓글