4.1 딥러닝 알고리즘 학습 방법
노드 값 계산 방법
- 입력층과 은닉층에는 일반적으로 바이오스 노드 존재
- 바이오스 노의 값은 1로 고정되며 입력 웨이트를 갖지 않음
- 바이오스란 입력값이 0일 때 곱하면 항상 0이 출력되므로 이를 방지하기 위해 추가한 임의의 값
- 활성화 함수 f(연결가중치 w * 입력값 + 바이오스 b)
- 노드 값 v_i 는 앞 층의 노드 값과 해당 연결가중치의 곱을 모두 더해 활성화함수에 대입해 나온 값
- vi = h(w1 * v1, i-1 + w2 * v2, i-1 + .....)
- vi는 i 층의 노드 값
- 활성화 함수의 종류
- 시냅스는 전달된 전기신호가 최소한의 자극값을 초과하면 활성화되어 다음 뉴런으로 신호 전달
- 값이 최솟값보다 작을 때 출력값을 작은 값으로 막고, 일정한 값을 초과하면 출력값이 커지는 함수 사용
- 은닉층에서 주로 사용되는 활성화 함수
- 쌍곡탄젠트 함수
- sigmoid 함수
- ReLU(Rectified Linear Unit) 함수, y = 0(x < 0), y = x (x > 0)
- 쌍곡탄젠트와 sigmoid 함수의 경우 값이 커지면 함수의 경사가 0에 가까워짐
- 경사가 0에 가까워지면 학습이 더 이상 진행 x
- 이에 비해 ReLU 함수는 학습속도가 빠르고 중단되는 일이 적어 최근 많이 사용됨
- ReLU는 0보다 작은 값에서 경사가 0이므로 이 부분에 경사를 준 ReLU 함수도 자주 이용됨
- 출력층에서는 소프트맥스(softmax) 함수가 자주 사용됨
- 인공신경망의 출력값으로 확률 벡터를 얻고 싶을 때
- vi = exp(-o_i) / exp(-o_1) + ..... + exp(-o_n)
- vi의 모든 값을 더하면 1이 되어야 함
계층의 종류
전결합층
앞 층 노드와 자기 층의 노드가 모두 웨이트로 연결되어 있는 층
단, 자기 층의 바이오스 노드는 제외
전결합층의 노드 값은 노드값, 연결가중치, 활성화 함수로 계산됨
연결된 모든 조합에 대해 처리해야 하므로 계산량이 많이 필요
은닉층 후반부 또는 출력층에 자주 사용
컨볼루션층
앞 층에서 인접한 노드끼리의 집합과 자기 층의 노드가 웨이트로 연결되어 있는 층
컨볼루션층의 노드값도 노드값, 연결가중치, 활성화 함수로 계산됨
인접한 노드끼리의 집합을 국소적 노드라고 부르기도 함
컨볼루션층은 이미지에 필터를 사용하는 것과 같은 효과(필터의 특성은 연결가중치에 의해 결정)
컨볼루션층은 이지미에서 특징을 추출한다고 볼 수 있음
필터란 이미지 속 특징을 강조하는 계산
풀링층
앞 층과 국소적으로 연결되어 있다는 점에서 컨볼루션층과 유사
노드 계산 방법이 전결합층이나 컨볼루션 층과 다름
앞 층의 국소적인 노드에서 결정된 값을 자기 층의 노드 값으로 취함
예를 들어 국소적인 노드의 최대값을 자기 노드값으로 취함
풀링층으로 이미지를 계산하면 이미지의 작은 변화를 흡수(특정 영역에서의 최댓값을 취해 계산)
범위 내 아주 작은 위치 변화가 있어도 풀링층에서는 같은 값을 반환
이미지가 조금 변해도 같은 결과
다른 타입의 층을 조합
- 예를 들어, 이미지 인식에서 컨볼루션층이 특징량을 추출하고 풀링층이 위치 변화를 흡수해 결괏값의 변화를 최소화
4.2 신경망 학습 방법
- 출력층의 값과 실제 데이터와 차이(오차)를 계산
- 오차의 제곱합을 최소화
경사 하강법
- 변수의 초기값 정함
- 변수값에 대응하는 함수의 경사도 계산
- 변수를 경사 방향으로 움직여 다음 변수값으로 설정
- 함수의 최소값이 되는 변수값으로 근접해 나감
- x_i+1 = x_i - 학습률 * 기울기(미분값)
- 경사 하강법에는 변수, 함수, 함수의 경사가 필요함
- 변수 : 각 웨이트의 가중치
- 함수 : 출력층 값과 훈련 데이터의 오차의 제곱 합을 데이터 갯수만큼 더한 것
- 제곱합을 총합을 계산하는 부분이 병목현상 지점(데이터 개수가 많아질수록 총합 계산할 숫자가 증가)
- 경사 하강법의 종류
- 배치법 : 모든 데이터를 이용해 갱신 처리를 수행(기본방식)
- 미니 배치법 : 훈련 데이터에서 소량의 데이터를 적당히 선택해 갱신 처리 수행(처음에 이렇게 10개, 다음에 다르게 10개.. 반복)
- 확률적 경사 하강법 : 훈련 데이터에서 하나씩 적당히 선택해 갱신(처음에는 A, 다음에는 B)
- 데이터가 만힉 때문에 주로 확률적 경사 하강법이나 미니배치법 자주 사용
- 경사 하강법을 이용하려면 함수의 경사도를 계산할 수 있어야 함
- 신경망 학습 처리에서 최소화되는 함수의 경사를 효율적으로 계산하기 위한 방법으로 오류역전파법 사용
오류 역전파에 의한 경사 계산
- 전방전파 : 입력층 -> 순차적으로 은닉층 -> 출력층 노드 값 결정
- 역전파 : 출력층으로터 은닉층 거쳐서 입력층까지 진행되는 것
- 역전파시키는 것은 오류(오차)
- 우선, 전방전파 방법으로 입력,은닉,출력층의 노드 값 계산하고 이 값 저장
- 출력층 각 노드에서 데이터값과의 오차 계산
- 은닉층의 노드는 다음 층의 노드들과 연결가중치로 연결
- 노드 간의 오차는 웨이트로 연결된 노드, 연결가중치, 노드 자신의 값에서 계산
- 출력층부터 차례대로 역방향으로 따라 올라가게 각 층에 있는 노드의 오차를 계산
- 각 노드의 오차를 계산하면 그 오차를 사용해 함수의 경사를 계산
- 결과적으로 신경망 학습에 경사 하강법을 사용할 수 있게 되고, 연결가중치 최적화
드롭아웃
- 신경망 학습 시 계산 과정을 반복하면서 임의의 노드 몇개를 샌략하여 학습, 다음 계산 때는 다른 노드 생략하고 학습 반복
- 일반적으로 입력층 20%, 은닉층 50% 생략
- 고성능인 이유는 앙상블 학습과 비슷(여러가지 기계학습 결과로 판단을 내려 학습 성능 증가)
- 그 외 드롭커넥트(연결가중치를 랜덤하게 생략), 어댑티브 드롭아웃(상황에 따라 노드 생략)
- 정밀 학습 방법으로 아다그라드(AdaGrad)나 아다델타(AdaDelta), 아담(Adam) 등이 있음 - 학습에 맞추어 학습률 최적화
4.3 딥러닝 알고리즘
컨볼루션 신경망 학습 방법
CNN : 컨볼루션층과 풀링층을 포함하는 신경망
오류역전파법을 적용한 확률적 경사법 or 미니배치법에 의한 경사법으로 학습진행
보통 드롭아웃이나 아다그라드도 병행하여 이용
전합결층은 층이 깊어져도 정밀도가 높아지지 않는 문제 발생
CNN은 이와 비교했을 때 층이 깊어도 통상적인 신경망 학습방법으로 높은 정밀도
오토인코더 학습 방법
- 입력층과 출력층의 값이 같은 신경망
- 주어진 데이터는 입력 데이터 뿐 (주어진 입력 데이터가 훈련데이터도 겸하고 있다)
- 오토 인코더는 입력과 출력이 가급적 똑같게 하는 신경망
- 층이 깊은 오토인코더는 단순히 오류역전파법에 의한 학습으로 정밀도 안 나옴
- 대안으로 층별로 학습하는 방법 제안됨
- 입력층 - 은닉 1 - 은닉 2 - 은닉 3 - 출력층이라고 할 때,
- 입력층 - 은닉 1 - 출력층으로 만든 오토인코더에서, 입력층과 은닉층 연결 가중치를 본래의 입력층과 첫번째 은닉층의 연결가중치로, 은닉층과 출력층 연결 가중치를 본래의 은닉 3과 출력층의 연결 가중치로 정함
- 은닉 1(입) - 은닉 2 - 은닉 3(출)으로 만든 오토인코더에서, 입 - 은닉 가중치를 본래의 은닉 1과 은닉 2의 가중치로, 은닉- 출 가중치를 원래의 은닉 2와 은닉 3의 가중치로 정함
- 이렇게 설정된 연결가중치를 초기값으로 본래의 오토인코더를 오류역전파법으로 학습하면 높은 정밀도로 학습 가능
순환 신경망 학습 방법
은닉층에 자기 순환 기능이 있고, 시계열 데이터를 적용하는 신경망
훈련 데이터로는 시계열의 입력 데이터와 시계열의 지도 학습 데이터가 쌍으로 사용됨
은닉층에 자기 순환 기능이 있어 위의 신경망 학습방법 적용 불가능
BPTT(Back Propagation Through Time)
입력층 - 은닉(순환) - 출력층을 펼친다.
입력층 입력층
은닉(h1) -----> 은닉(h2) --------> 은닉(h3)...
순환 순환
이렇게 전개한 후 오류역전파법 적용
- 오차 계산법이 다른 신경망과 조금 다름
- h3의 오차는 오류역전파법과 o3(세번째 펼친거의 출력)의 오차를 사용하여 계산. 다음 h2의 오차는 오류역전파로 구한 o2의 오차와 오차 h3을 이용하여 계산..