오늘은 여러 가중치 갱신 방법을 알아보고자 한다.


그 전에 생각할 점은, 앞서 본 은닉층 없는 허접한 신경망 대신 다층 신경망을 학습시킬 준비를 해야 한다.


이를 위해 먼저 1986년에 개발된 역전파(backpropagation) 알고리즘을 알아보자.


이 알고리즘은 은닉층의 가중치를 바꿀 때 얼마나 오차가 빨리 변하는지를 계산할 수 있다. 즉 개별 시냅스의 가중치를 변경할 때의 오차가 얼마나 빨리 변


하는지를 알 수 있는 것이다. 이를 통해 가장 가파른 하강 방향을 찾아 빠르게 극점으로 도달하는게 목표다.



대충 생각해보면 기계학습은 매직 박스마냥 층만 잘 쌓으면 수행되는걸로 오해할 수 있다. 이처럼 추상화로 덮힌 부분을 잘 모르고 가져다 쓸 때 발생하는 


비효율을 leaky abstraction이라고 한다. 그래서 자체적으로 역전파를 이해하려는 노력이 필요한 것이다. 



하나의 은닉 노드는 모든 출력 노드에 영향을 미칠 수 있다. 따라서 오차에 대한 여러 은닉 노드들의 효과를 결합해서 분석해야한다.


이 때 역전파의 전략은 일종의 다이나믹 프로그래밍이다.


한 은닉층에 대해 오차 도함수를 얻은 다음에, 이를 전의 가중치에 대한 오차 도함수를 계산하는데 사용하는 것이다.



디피문제처럼 귀납적으로 다뤄진다.


먼저 j번째 층에 대한 오차 도함수가 있다고 생각해보자. 최종적으로는 i번째 층에 대한 오차 도함수를 알아내야 한다.


이를 위해 i번째 층의 아웃풋들이 j번째 층의 오차에 얼마나 영향을 주는지에 대한 정보를 모아야 한다. 



0. 역전파 알고리즘


먼저 출력층에서 오차 도함수를 각 출력층 뉴런에 대한 편미분으로 구하면 다음과 같다.


이제 귀납적으로 i번째 층의 뉴런 출력이 j번째 층의 모든 뉴런의 오차에 얼마나 영향을 미치는지에 대한 정보를 모아야 한다.


고맙게도 아래층에서 들어오는 출력의 오차를 연결 가중치 들로 편미분 될 수 있으므로 다음과 같이 표현할 수 있다.



또한 로짓에 대한 출력의 도함수를 표현한다면 시그모이드 함수르 쓴다면 다음과 같이 표현된다.


이제 두식을 합치면 j번째 층의 오차 도함수의 관점에서 본 i번째 층의 오차 도함수를 다음과 같이 표현할 수 있다.


모든 은닉층들도 재귀적으로 오차 도함수를 구할 수 있게 되었다. 다음은 한 데이터셋을 학습한 이후 어떻게 수정되어야하는지를 알려준다.

마지막으로 데이터셋에 전체 학습 데이터셋에 대한 도함수를 합산하면 다음과 같이 수정된 식으로 나타낼 수 있다.



수학적으로 주저리 주저리 쓰여있는데,


역전파는 말 그래도 내가 영향을 주었던 노드들에게서 전부 피드백을 받아 가중치를 수정해 나가는 과정이다.(겉핡기)


(미완성)


'머신러닝' 카테고리의 다른 글

머신러닝 둘째날 - 신경망 - 델타 규칙  (0) 2018.03.27
머신러닝 첫날 - 용어  (0) 2018.02.07

저번에 인공지능과 머신러닝, 딥러닝이 무슨 차이인지 설명하는걸 까먹어서 이번 차에 쓰려고 한다.


한 줄로 관계를 요약하면 다음과 같다.


"딥러닝은 머신러닝의 일종이고, 머신러닝은 딥러닝의 일종이다."


우선 인공지능은 뜻이 가장 포괄적으로, 지능적인 요소가 포함된 기술을 모두 일컫는 단어다.


스마트 머시기 하는데 들어가는 모든 기술은 인공지능이라고 하는 추세에서 알 수 있다.


여러 인공지능 분야에서 머신러닝은 "데이터를 이용한 모델링 기법" 이다.


딥러닝은 "여러 비선형 변환기법의 조합"으로 기계를 학습시키는 알고리즘이다.



머신러닝이 만능인것마냥 대중들에게 소개되고 있지만 이 분야에도 몇 가지 문제점이 존재한다.


1. 학습할 데이터와 입력 데이터의 질 : 학습 데이터가 입력 데이터의 특성을 잘 반영하지 않는 데이터면 일반화가 구려진다.


2. 학습 데이터를 너무 잘 맞춘다 : 주로 과적합이라고 말하는데, 학습데이터의 잡음도 정답이라 학습하기 때문에 일반화가 구려진다.



머신러닝은 오래전에 소개되었지만 속도 문제로 잊혀진 기술이었다.


하지만 최근엔 과적합에 대항하는 기법이 개발되었고, 복잡한 행렬연산을 빠르게 처리해줄 하드웨어(주로 GPU)의 발전으로 부상하게 된다.


과적합에 대항하는 기법은 다음 두 가지다.


1. 검증 : 학습 데이터를 학습용과 검증용으로 분류한다.(주로 4대1) 학습 이후 검증이 잘 안되면 다시 분류해서 수행한다.


2. 정칙화 : 모델을 최대한 간단하게 만들고자 하는게 기본 전략으로 다음 기회에 자세히 알아보자.



신경망(neural network)은 머신러닝의 모델로 많이 사용된다.


뇌의 신경세포들이 연결된 네트워크를 본 뜬 모델로, 정보를 노드들의 관계(가중치)로 저장하는 것이다.


박스 노드들은 입력층, 최우단의 짙은 노드들은 출력층이다. 사이사이 층들은 은닉층이라고 한다.


단층 신경망은 은닉층이 없는 경우를 말하고, 반대는 다층 신경망이다. 이 중에 얕은(=shallow vanilla) 신경망은 은닉층이 하나인 경우고,


심층 신경망은 은닉층들이 2개 이상인 경우다.



각 노드엔 여러 신호에 가중치가 곱해져 들어오고, 바이어스가 추가로 관여하여 활성함수를 이룬다. 함수의 결과가 출력된다.


따라서 신경망에서 정보는 가중치와 바이어스로 바뀌어 저장되는 것이다.


활성함수가 선형함수라면 결국엔 행렬곱들로 계산식을 나타낼 수 있는데,


잘 생각해보면 계산식을 잘 정리하면 다층 신경망이 단층 신경망이 된다는 점을 알 수 있다. 은닉층을 추가한 효과가 없다.



신경망 모델로 지도학습을 시키는 방법은 간단하다.


가충치를 초기화하고 학습 데이터의 출력값과 정답의 오차를 계산해본다. 오차가 크다면 피드백으로 가중치를 잘 조절해주면 된다.


오늘은 단층 신경망만 학습시켜보기로 한다.



대표적인 학습 방법인 델타 규칙(delta rule = adaline rule = widrow-hoff)에 대해 알아보자.


델타 규칙은 오차를 최소화 하고자 오차 그래프를 미분해 점진적으로 극점을 찾아가는 점진 하강법에서 비롯되었다.



최종적으로는 , 라는 수식으로 결과가 나오는데, 먼저 각 기호에 대해 정의하고, 증명하고 설명하도록 하겠다.


1. 
 는 상수로 학습률이라고 한다.(0과 1사이 값)


2.  는 활성화 함수다.


3.  는 j번 째 출력값이다.


4.  j번째 출력노드로 들어온 가중치가 곱해진 값들의 합으로  이다.


5.  j번째 출력값이다. 따라서 이다.


6.  는 i번째 입력값이다.



증명 

1) 오차의 합은  으로 쓸 수 있고, 이를 각 가중치로 편미분 한다고 치면 

2) 다음과 같이  표현할 수 있다.

3) 이번엔 체인 룰을 통해 가중치 편미분을 출력값 편미분으로 바꿔보자. 

4) 남은 편미분을 처리하기 위해 다시 체인 룰로 다음과 같이 표현되는데,  

5) 5번 정의에 의해 이다. 

6) 다시 한번 4번 정의에 의해 가 된다.

7) 모든 k중에 현재 i번째 가중치에 대해서만 편미분 중이므로 최종적으로 가 된다.



점진적 하강법은 미분직선을 따라 곡선의 극점을 향하는 방법으로 생각하면 되는데,


이를 위해 작은 상수인 학습률을 도입하면  가 얻어진다.


수식의 의미는 다음과 같다.


어떤 입력 노드가 출력 노드의 오차에 기여했다면 두 노드의 연결 가중치를 입력 노드의 출력 + 출력 노드의 오차를 고려해서 조절해야 한다는 것이다.


대부분의 소프트웨어들은 명시적이다(explicit)


즉 코더가 일일이 이럴땐 이러케, 저럴땐 저러케 동작하라고 적어놓으면, 고대로 동작한다.


따라서 규칙이 겁나 복잡한(자율주행 자동차) 경우 코더들을 갈아넣어도 만들 수 없는 소프트웨어들이 있기 마련이다.



기계 학습은, 이러한 명시적이지 않은 동작들을 데이터로부터 학습하여 수행할 수 있게하는 알고리즘이다.


데이터들로부터 일반적인 동작을 알아내서 스스로 동작하는 것이다.



이러한 정의 하에, 데이터마이닝 머신러닝은 교집합이 상당한데,


기계학습은, 데이터로부터 학습하고, 미래를 예측한다는 특성이 강한 반면에,


데이터마이닝은 데이터들에 감춰져있던 속성을 발견하는 특성이 강하다.


가령 사용자들의 sns를 분석해 소비 패턴을 파악하는 경우에 데이터마이닝 속성이 강하다고 할 수 있다.




머신러닝의 학습 방법은 크게 두가지로 나뉜다.



지도 학습(supervised learning)이란


학습할 데이터(training set)에 이미 속성(label, 정답)들이 부여되어 있고, 학습 이후에 올바른 정답(사용자가 원하는)을 밷게 하는 방법이다.


대부분의 머신러닝 분야는 지도 학습이 주를 이루고 있다.


가령 고양이와 사람 사진을 분류하게 학습시킨다던가, 손글씨를 읽어내게 학습시키는 류는 모두 지도 학습방법을 쓴다.


지도학습의 학습 데이터는 {입력, 정답} 쌍이다.



반면 비지도 학습(unsupervised learning)


사용자도 정답(label)을 모르는 데이터들을 주고 학습시키는 방법이기 때문에


기계 스스로 비슷한 데이터들끼리 모아주는(군집화, clustering) 행동과 밀접하다.


군집화와 속성 분류는 개념은 비슷하지만 완전히 다른 기법이므로 명확히 구별해서 사용해야 한다.


비지도 학습의 학습 데이터는 입력만 있고 정답은 없다.




지도 학습도 데이터 종류에 따라 두 가지로 나눌 수 있다.


고양이와 사람은 명확히 다르기 때문에, 종을 구분하게 학습시키는 것은 분류(classification)라 한다.


반면 키와 같이 범위형으로 주어지는 학습 데이터로, 자식의 키를 예측하게 하는 등의 모델은 회귀분석(regression)이라 한다.


+ Recent posts