본문 바로가기

Programming/Deep Learning

딥러닝 겉핥기 with 파이토치 - 1

본 글은 "딥러닝 파이토치 교과서" 책을 겉핥으면서 개인 공부 목적으로 작성되었습니다.

 

1. 딥러닝의 출현.

다수의 신호 흐름을 입력으로 받아 하나의 신호를 출력하는 퍼셉트론이라는 선형분류기가 기원.
하지만 단층 퍼셉트론은 AND/OR 게이트로만 동작하며 XOR게이트와 같이 비선형적 분리를 하지 못함.
이를 극복하기 위해 입력층과 출력층 사이에 하나 이상의 중간층을 두어 비선형적으로 분리되는 데이터도 학습이 가능하도록 다층 퍼셉트론이 제안되었고 이 은닉층이 여러개 있는 신경망을 심층 신경망, 다른 이름으로 딥러닝이라고 하게 됨. 

2. 딥러닝의 구조.

딥러닝은 입력층, 출력층, 두 개 이상의 은닉층으로 구성되어 있음.
---
입력층: 데이터를 받아들이는 층
은닉층: 입력노드로부터 받아들인 값의 가중합을 계산하고 이 값을 활성화 함수에 적용하여 출력층에 전달하는 층
출력층: 신경망의 최종 결괏값이 포함된 층
---
가중치: 노드 간의 연결 강도
바이어스: 가중 합에 더해주는 상수로, 하나의 뉴런에서 활성화 함수를 거쳐 최종 출력되는 값을 조절하는 역할
가중합: 가중치와 신호의 곱을 합한 것
활성화 함수: 신호를 입력받아 이를 처리하여 출력하는 함수
손실 함수: 가중치 학습을 위해 출력 함수와 실제 값 간의 오차를 측정하는 함수
---
활성화 함수
시그모이드 함수: 선형함수의 결과를 0~1 사이의 비선형 형태로 변형해 줌. 기울기 소멸문제로 인해 딥러닝 모델에 잘 사용하지는 않음
하이퍼볼릭탄젠트 함수: -1~1 사이의 비선형 형태로 변환해 줌. 결괏값의 평균을 0으로 할 수 있으나 기울기소멸문제 여전히 발생
렐루 함수: 입력이 음수일 때 0을 출력, 양수일 때 x를 출력. 기울기 소멸이 없으나 음수 때 항상 0 출력으로 인한 학습능력 감소
리키 렐루 함수: 렐루 + 입력이 음수일 때 0이 아닌 매우 작은 수를 반환
소프트맥스 함수: 0~1 사이에 출력되도록 정규화하여 출력값 총합이 1이 되도록 함. 출력노드의 활성화 함수로 많이 활용.
---
손실 함수
평균제곱오차(MSE): 회귀에서 주로 사용되는 손실함수
크로스 엔트로피 오차(CEE): 분류에서 원핫 인코딩 했을 떄 활용 가능.
---
순전파: 네트워크에 훈련데이터가 입력층에 들어올 때 은닉층을 거쳐 모든 뉴런이 계산 완료 후 최종 층에 도달.
역전파: 손실 함수 계산 후 정보 역으로 전파 진행. (출력 -> 은닉 -> 입력층) 이 때, 예측 값과 실제 값 차이를 각 뉴런의 가중치로 미분 후 기존 가중치에서 뺀 상대적 기여도를 계산.
---
Over-fitting Dropout: 일부 노드 학습 제외

3. 딥러닝 알고리즘

심층 신경망(DNN)
다수의 은닉층 덕분에 비선형적 관계 학습이 가능하지만 연산량이 많고 기울기 소멸 문제 발생 가능, 이를 위해 드롭아웃, 렐루 함수, 배치 정규화 등을 적용하여야 함.

합성곱 신경망(CNN)
Convolution layer와 Pooling layer가 있는 이미지 처리 성능이 좋은 인공신경망.

순환 신경망(RNN)
시계열 데이터 학습에 좋은 인공 신경망. 현재 결과가 이전 결과와 연관이 있는지를 참조함.