*자주 사용되는 신경망 구조
1) 방사선 기저 함수(radical basis function, RBF) 신경망
└대부분 층이 두 개. 첫 층은 입력 데이터만 이용하기 때문에 비지도 방식, 둘째 층은 입력 데이터와 타겟 데이터를 이용해 가중치를 구하기 때문에 지도 학습 기법 사용함.
└깊이가 아니라 특정 공간의 크기를 늘리면서 능력을 증가시킴. 둘째 층에는 각 노드의 원형(prototype)이 들어있고, 활성화 값은 원형과 입력 자료의 유사성에 따라 결정된다.
└기존의 MLP(multi-layer perceptron, 다층 퍼셉트론)이랑의 차이점은 MLP는 선형으로 데이터를 구분하고 RBF는 비선형이다.
2) 제한 볼츠만 기계(restricted Boltzmann machine, RBM)
└에너지 최소화라는 개념을 이용해서 비지도 방식으로 자료를 모형화하는 신경망 구조. 임력층과 은닉층 총 두 층으로 이루어져 있어 심층 신경망은 아니다. (심층 신경망은 입력, n개의 은닉, 그리고 출력)
└역전파로 훈련할 수 없음.
3) 순환 신경망(recurrent neural network, RNN)
└하나의 연속된 구성 요소들 사이에 의존관계가 존재, 특정 입력 자료점은 오직 그 이전 시간의 입력들이 이미 주어져 하나의 은닉 상태로 변환된 이후에 주어질 때만 도움됨. 이전 시간들에서 입력들로부터 만들어진 은닉 상태들과 직접 상호작용 가능.
└시간 역전파(BPTT) 사용
└튜링 완전(Turing complete), 즉 충분한 자료와 계산 자원이 주어진다면 그 어떤 알고리즘도 흉내 낼 수 있음
4) 합성곱 신경망(convolution neural network)
└신경망의 각 층은 공간적 크기와 깊이를 가진 3차원, 깊이는 특징의 수에 해당한다.
└합성곱 신경망의 한 층의 깊이는 신경망 자체의 깊이, 즉 층의 수로 결정되는 것 과는 다름.
└입력층에서 입력은 RGB같은 색상 채널들에 해당하고, 은닉층에서 이 채널 특징은 이미지에 존재하는 다양한 종류의 도형들을 부호화한다. 입력이 grayscale인 경우 채널이 하나이므로 입력층의 깊이가 1이지만, 그 이후의 층들은 여전히 3차원일 수 있음.
MNIST 데이터 베이스 : 손으로 쓴 숫자들의 이미지를 담은 대형 데이터 베이스
ImagNet 데이터 베이스 : 여러 범주의 이미지를 담은 대형 데이터 베이스
*이진 분류 모형을 위한 신경망 구조
회귀 : 예측하고 싶은 목푯값(=종속변수)가 숫자일 때 회귀를 대부분 이용.
아달린 규칙(Adaline) = 위드로 호프 학습 = 최소 평균 제곱법
로지스틱 회귀(logistic regression) : 견본들을 확률에 근거해서 분류하는 확률 모형. 분류가 확률적이기 때문에 각 훈련 견본이 관측된 부류에 속할 확률의 예측 값이 최대한 커지도록 매개 변수들을 최적화 하는 것이 자연스러운 접근.
└최적화 목표는 최대 가능도 추정(maximum-likelihood estimation) 기법 이용
└훈련 자료의 가능도는 각 훈련 견본의 관측된 분류명들의 확률들의 곱으로 정의, 이 목적 함수의 값이 클수록 좋음
지지 벡터 기계(SVM) : 매끄러운 손실함수를 쓰는 로지스틱 회귀와는 다르게 경첩 손실 함수를 사용. 경첩 손실 함수의 핵심은 양성 견본은 그 값이 1 미만일 때만 벌점이 가해지고, 음성 견본은 그 값이 –1보다 클 때만 벌점이 가해진다는 점.
*다중 분류 모형을 위한 신경망 구조들
1) 다부류 퍼셉트론
2) 웨스턴-왓킨스 SVM
3) 다항 로지스틱 회귀(소프트맥스 분류기) : 부류에 대한 소속도를 확률 값으로 예측
4) 다중 분류를 위한 위계적 소프트맥스
신경망의 경우 해석성이 부족하지만 역전파를 사용하면 특정 훈련 견본의 분류에 가장 크게 기여한 특징을 결정하는 것이 가능.
* 자동 부호기(autoencoder)

└입력층의 차원과 출력층의 차원이 같고, 은닉층이 입, 출력층보다 적은 수의 단위로 구성됨. 결과적으로 원래의 자료를 온전하게 복원할 수 없음.
└자료의 축소된 표현을 부호라고 부른다. 즉 자동 자료 축소기.
└인코더와 디코더(=부호기와 복호기)가 가중치를 공유, 가중치를 묶는다고도 한다.
심층 자동 부호기(deep autoencoder, stacked autoencoder) : 여러 단계의 은닉층을 가짐.
word2vec : 단어 벡터 간 유의미한 유사도를 반영할 수 있도록 단어의 의미를 수치화 할 수 있는 대표적인 방법
└연속 단어 모음(continuous bag-of-words, CBOW) : 문맥에서 목표 단어 예측 모형
└스킵 그램 모형 : 목표 단어에서 문맥 단어를 예측하는 모형
└부정 표집 스킵그램(skip-gram with negative sampling, SGNS) : 단어들을 말뭉 치 안에서의 도수에 비례해서 표집함으로써 음의 문맥을 인위적으로 생성
*역전파 알고리즘
batch : gpu가 한번에 처리하는 데이터의 묶음
배치 경사 하강법(batch gradient descent : BGD)
└전체 학습 데이터를 하나의 배치(크기가 b)로 묶어 학습시키는 경사 하강법.
전체 데이터에 대한 모델의 오차의 평균을 구한 후, 이를 이용하여 미분을 통해 경사를 산출, 최적화를 진행.
└전체 데이터를 통해 학습시키기 때문에 가장 업데이트 횟수가 적음. (1 epoch당 1회 업데이트)
└전체 데이터를 모두 한번에 처리하기 때문에 메모리가 많이 필요.
└항상 같은 전체 데이터에 대해 경사를 구하기 때문에 수렴이 안정적.
확률적 경사 하강법(stochastic gradient descent : SGD)
└전체 데이터 중 단 하나의 데이터를 이용하여 경사 하강법을 1회 진행 (배치 크기가 1)
└전체 학습 데이터 중 랜덤하게 선택된 하나의 데이터로 학습을 하기 때문에 확률적.
└배치 경사 하강법에 비해 적은 데이터, 속도가 빠름, 수렴에서 shooting이 많이 발생.
└각 데이터에 대한 손실 값의 기울기가 약간씩 달라 개별데이터에 대해 미분을 수행하면 기울기의 방향이 매번 크게 바뀜.
미니 배치 확률적 경사 하강법(mini-batch stochastic gradient descent : MSGD)
└전체 데이터를 batch_size개 씩 나눠 배치로 학습 (배치 크기를 사용자가 지정)
└shooting이 적당히 발생
└batch 사이즈는 대부분 2의 n승
초매개변수(hyper parameter) : 모델 내부에서 결정되어 사용자에 의해 조정되지 않는 매개변수와는 달리, 사용자가 직접 셋팅 할 수 있는 값
└layer 수, 학습 횟수 등
└초매개변수는 격자 검색(grid search)를 통해서 제일 잘 조정된다.
└격자 검색 : 모델 초매개변수에 넣을 수 있는 값들을 순차적으로 입력 후, 가장 높 은 성능을 보이는 초매개변수를 찾는 탐색 방법
* 특징 전처리
평균 중심화(mean-centering)와 가산적 전처리
└자료가 평균을 중심으로 한다고 가정할 때, 평균들의 벡터를 각 자료 값에서 뺌.
└가산적 전처리 : 모든 특징 값이 음수가 아닌 것이 바람직할 때 사용. 절댓값이 가장 큰 음의 값을 각 자료점의 해당 특징 성분에 더한다.
2. 특징 정규화(feature normalization)
* 최적화 알고리즘 종류
확률적 경사 하강법 (pass한다 위에봐)
Momentum 알고리즘(운동량 기반 학습법)
└누적된 과거 gradient가 지향하고 있는 어떠한 방향을 현재의 gradient에서 보정. 최적화를 향해 진행하던 속도에 관성을 주어 느린 학습 속도, saddle point에서 학습종료, 진동이 심한점 문제를 해결하는 알고리즘.
└overshooting 문제가 있음
3. Nesterov momentum(네스테로프 운동량 방법)
└현재 위치의 gradient를 이용하지 않고 속도v_t 만큼 전진 후 gradient 이용. 모험적으로 먼저 진행한 후 에러 고정.
└관성을 주는 점은 모멘텀과 같지만 overshooting을 막기 위해 미리 가보고 overshooting 된 만큼 다시 내려가는 방식.
4. Adagrad 알고리즘 (adaptive gradient의 줄임말)
└손실 함수 곡면의 변화에 따라 적응적으로 학습률을 정함.
└경사가 가파를 때는 큰 폭으로 이동하여 최적화 경로를 벗어나 최소 지점을 피하고, 경사가 완만할 때는 최적해 경로가 아닐 가능성이 있으므로 큰폭으로 이동.
└즉, 많이 변화한 변수는 최적해에 근접했을 거란 가정하에 작은 크기로 이동하면서 세밀하게 값을 조정하고 반대로 적게 변화한 변수들은 학습률을 크게 하여 빠르게 오차 값을 줄이고자 하는 방법.
5. RMSProp
└Adagrad와 비슷하지만 지수 가중 이동 평균(=지수적 평균)을 추가로 사용함.
└지수 가중 이동 평균은 가중치 β를 사용. 이전 값에 β, 현재 값에 (1-β)를 곱한다.
└β를 이용해 기울기를 정규화 하고, 기울기를 이용해 각 매개변수를 갱신한다.
└Adagrad는 오래된 계수들의 효과가 사라지지만, RMSProp는 이를 방지
6. AdaDelta(Adaptive Delta)
└Adagrad, RMSProp, Momentum 모두 합친 경사하강법
└전역 학습 속도 매개 변수를 따로 두지 않고, 이전 반복들의 점진적 갱신들의 함수로 전역 학습 속도를 계산.
7. Adam
└Momentum과 RMSProp이 합쳐진 형태
└진행하던 속도에 관성을 주며 최근 경로의 곡면에 변화량에 따른 적응적 학습률을 가짐
기울기 절단(gradient clipping) : 서로 다른 방향의 편미분들의 크기 차이가 심할 때를 해결하기 위해 사용. 지금까지의 기울기 값들이 아닌 현재 기울기 값만을 절단.
└값 기반 절단
└노름 기반 절단
Hessian Matrix(헤시안 행렬, 헤세 행렬) : 어떤 함수의 2계 도함수들을 이용하여 만든 행렬.
└기하학적 관점에서 보면 헤시안 행렬을 이용해 특정 함수의 특정 위치가 위로 볼록, 아래로 볼록, 안장점인지 구분할 수 있다, (더 경사지게 함)
* 배치 정규화
└기울기 소실, 폭주를 극복하기 위한 하나의 방안으로 내부 공변량 변화를 줄일 수 있다.
└내부 공변량 변화 : 훈련 도중 매개 변수들이 변함에 따라 은닉 단위들의 활성화 값이 변해 훈련 자료가 불안정해져 학습의 수렴이 느려짐.
└기본 개념은 은닉층들 사이에 정규화층(normalization layer)을 추가하는 것.
└신경망의 각 층에 들어가는 입력을 평균과 분산으로 정규화.
└각 층에서 활성화 함수를 통과하기 전 수행, 유동적으로 만들어진 자료로 매개 변수를 학습
* 학습 알고리즘 구현 가속과 압축 요령
└1. GPU 가속 : 단일 명령 다중 스레드(single instruction multiple threads, SIMT) 방식 을 사용하는 GPU를 사용해 가속
└2. 병렬 구현 : 다수의 CPU 혹은 GPU를 사용해 병렬화.
└3. 모형 실행 시 압축 알고리즘 사용
일반화 능력(generalization) : 학습 모형이 이전에 배우지 않은 사례들에 대해서도 유용한 예측을 제공하는 능력
신경망의 과대 적합(overfitting)을 피하는 주요 방법
└1. 벌점 기반 정칙화
└2. 앙상블 기법 : 여러 개의 분류기를 생성하고 그 예측의 평균을 최종 예측값으로 사용
└3. 조기 종료
└4. 사전 훈련 : 탐욕적 알고리즘 사용 (현재 상황에서 최선의 선택을 하는 알고리즘)
└5. 연속법과 커리큘럼 학습 : 간단한 모형을 훈련 후 그 모형과 밀접한 관련이 있는 복잡한 모형을 훈련.
└6. 문제 영역 고유의 통찰에 기초한 매개변수 공유 : 신경망을 서로 다른 부분의 매개변수 들을 같은 값으로 두어 문제영역에 관한 지식을 모형에 반영.
학습 알고리즘의 제곱 오차 세 가지
└1. 편향(bias) : 실측치와 예측치 간 오차가 크게 벌어짐 (정답과 대체로 멀리 있음)
└2. 분산(variance) : 예측치가 대체로 멀리 흩어져 있음
└3. 잡음 : 본질적으로 존재하는 오류로 발생
평균 제곱 오차(mean-squared error, MSE) : 오차의 제곱에 대해 평균을 취함
└즉 적을수록 실제 값과 오차가 적은 것
└MSE를 편향, 분산, 잡음 세가지로 수식을 분해할 수 있다.