인공 신경 망

From Hidden Wiki
Jump to navigation Jump to search

[include(틀:상위 문서2, top1=인공지능, top2=기계학습)] [include(틀:프로젝트 문서, 프로젝트=나무위키 인공지능 프로젝트)] [목차]

artificial neural network

개요

인공신경망이란, 인간의 뉴런 구조를 본떠 만든 기계학습 모델이다.

이름에서 알 수 있듯이 생물의 신경망, 특히 인간의 시각/청각 피질을 본떠 만든 알고리즘이다.[* 다만 이건 인간의 뇌에서 모티브를 얻었다는 정도지, 진짜 인간 뇌의 작동 방식과는 백만 광년 정도 거리가 있으니 낚이지 말도록 하자.]

처음부터 이렇게 유망한 분야였던 것은 아니다. 한동안 SVM과 NBC 등에 밀려 거의 사장되다시피 했는데, 그런 냉소적인 반응 속에서도 묵묵히 수십년간 연구를 이어온 일부 과학자들에 의해 기적처럼 다시 빛을 보게 된 특이한 케이스다 [* 학습에서 사용하는 기울기 하강법과 관련된 문제도 문제지만 하드웨어 성능과 병렬 연산의 진도가 덜 나간 상태에서 처음 등장한 것이 크다. 물론 인공신경망을 제대로 사용할 수 있는 환경이 갖춰지자 더 이상의 자세한 설명은 생략한다. ].

본론

파일:deep_neural_network.png 기본 원리는 단순하다. 몇 개의 층위를 만들어서 그 안에 '뇌세포'들을 집어넣고, 이들을 무작위 강도를 가진 '시냅스'들로 연결한다. 각 '뇌세포'들은 자신에게 들어온 신호를 가중치와 곱해 모두 더하고(<math>wx</math>), 역치와 비교해서(<math>wx + b</math>) 신호를 다음 뉴런으로 전송한다.

그런데 이렇게만 할 경우 전송되는 신호는 그냥 입력 신호의 선형 합이 될 뿐이고, 선형 합을 아무리 복잡하게 반복해 봤자 나오는 건 그냥 입력 신호의 선형 합밖에 없다(...) 따라서 이 <math>wx + b</math>에 무언가 비선형 함수를 취해야만 하며, 이것이 바로 '활성화 함수' 라는 것이다.

전달/활성화 함수

앞서 언급했듯이 입력 신호의 선형 합을 활성화 함수에 집어넣으면서 최종적으로 신호의 강도를 계산하는데, 그냥 주먹구구식으로 이것저것 함수를 대입해 보면서 가장 결과가 좋은 함수를 사용하는 중이다. 초기에는 sigmoid 함수를 사용한 logistic 모델이 사용되었고, tanh함수나 softmax 함수를 사용하기도 했지만, 시냅스를 학습시키면서 미분을 할때, 레이어가 증가하면 곱할 값이 0으로 수렴한다는 문제때문에 값을 0~1 혹은 -1~1 로 고정시키지 않는 ReLU 혹은 Leaky ReLU 를 이용한다. ReLU 는 max(0, x) 이며, Leaky ReLU 는 max(ax, x) (단, 0<a<1) 이다. Leaky ReLU를 쓰는 이유는 0 이하의 값에 대해서도 미분하기 위해서이다.

학습 방법

회귀 분석/지도 학습의 방법론에 입각해서, '정답'들과의 오차를 최소화하는 가중치와 역치를 찾는 최적화 문제를 풀게 된다. 여기서 역치는 가중치 벡터와 입력 벡터에 적절히 '묻어'버린다음 최종적으로 올바른 가중치를 찾는 것에 초점을 맞추며, 이 최적화 문제를 풀기 위해 경사/기울기 하강법을 사용한다. 인공신경망 알고리즘에서 발생하는 문제의 99%는 여기서 생긴다고 보면 된다.

학습과 관련된 문제 및 사람의 뇌와의 차이

기울기 하강법은 언급했듯이 인공신경망에서 쓰다보면 최소점이 없다던지 (최소점인줄 알았는데 전역 최소점이 아닌 지역최소점일뿐이었다든지), 기울기가 사라진다던지 하는 문제가 생긴다. 기울기 하강법은 비유하자면 지구의 무작위 위치에서 시작해서, 자신의 발 밑만을 보면서 조금이라도 아래쪽 경사가 있는 방향으로 걸어 나가는 것과 같다. 최소점이 없으면 일어날 수 있는 일 중에 하나가 극솟값에서 멈추는 것인데, 운이 좋다면 마리아나 해구의 밑바닥까지 갈 수도 있겠지만, 그보다는 극솟값, 즉 어딘가의 배수로나 논두렁, 살짝 패인 길바닥에 갇혀 오도가도 못하게 될 확률이 높다. 게다가 2차원인 지구 표면과 달리 알고리즘의 가중치 공간은 수백만 차원이 기본이다. 사람들이 '차원의 저주'라고 부르는 현상인데, 이런 초고차원 공간에서 발 밑만 보고 걸어서야 목표에 도달할 확률은 0에 가깝다. 실제로 알고리즘을 실행하면 돌릴 때마다 다른 결과가 나오는 것이 기본이다. 초기값을 심혈을 기울여 설정한 가장 현대적인 모델에서도! 다시 말해 차원수가 높아질수록 최소점이 존재한다는 장담을 하기 힘들어진다.

더 큰 문제는 경사하강법은 층위의 개수가 많아질수록 학습이 기하급수적으로 어려워진다는 것이었다. 각각 1000개의 뉴런으로 이루어진 3겹의 인공신경망을 생각해 보자. (이는 비현실적으로 작은 신경망이다.) 어떤 특정한 가중치 값을 조절하면, 이는 그 다음 층위에 있는 1000개의 뉴런에 영향을 미친다. 이 1000개의 뉴런은 다시 100만(1000^^2^^) 개의 시냅스를 통해 다음 층위에 영향을 미친다. 층위가 지날수록 신호는 기하급수적으로 희석되고, 층위가 조금만 깊어져도 이 신호는 심각할 정도로 약해져 노이즈에 완전히 파묻히게 된다. 이것이 바로 '기울기가 사라지는' 문제다.

이는 많은 사람들에게 당혹스러운 문제였다. 왜냐면 생물의 뇌에는 기본적으로 용량 제한이 없기 때문이다. 그런데 인공신경망 알고리즘은 생물의 뇌와 달리 수천 겹은 커녕 고작 3~5 겹에서 학습을 포기하고 GG를 선언했던 것이다.

인간의 뇌세포는 그 자체가 정보를 취합해 분석, 전달하는 복잡한 연산 장치이며, 그 과정은 아직까지도 완벽하게 해명되지 않았다. '인간의 뇌세포 한 개의 연산 과정은 entire ANN만큼이나 복잡하다.'[* Thomas M. McKenna , Joel L. Davis , Steven F. Zornetzer, Single Neuron Computation]고 표현할 정도. 학습 방법에도 큰 차이가 있다. 인공신경망 알고리즘에서는 전지전능한 프로그래머(?)께서 결과값을 하나하나 체크하면서 각 뉴런들의 가중치를 일일히 조정해 주는데, 인간 뇌에 그런 편리한 세포가 있을 리가... 뇌세포가 얻을 수 있는 정보는 인접한 뉴런들이 자신에게 보내오는 정보(그리고 호르몬에 의한 약간의 전체적인 통제)뿐이며, 이들에게는 전지전능한 프로그래머는 물론이고 학습자(teacher) 비슷한 것도 존재하지 않는다. [* 실제 생물의 에 대해서는 해당 문서로.]

뇌세포는 머나먼 목표값에 자신을 최적화하는 대신 맡은 자리에서 자신에게 들어온 신호를 처리하고 분석하는 역할을 한다. 이 과정은 헵 가소성(Hebb's plasticity)이라고 알려졌다. 설명하자면 자신에게 연결된 뉴런들 중 다른 뉴런들과 '함께' 움직이는 뉴런들의 연결을 강화시키고, 그렇지 않은 반동분자들은 연결을 끊어버린다. 때문에 층위가 많아질수록 정보가 취합되면 취합되었지 흩어지지는 않는다. 이런 본질적인 차이 때문에 인공신경망 알고리즘은 생물학적 뇌의 어설픈 모방으로 여겨졌고, 실패한 이론으로써 사람들의 뇌리에서 잊혀져 갔다.

명예회복, 그리고 부활

그런데 이렇게 역사에 묻힐 것 같던 이 이론은 돌연 딥러닝(Deep learning)이라는 이름으로 돌연 화려하게 부활했다. 공정하게 말하자면, 위에 나열된 이론적 문제점들은 최소한 '과학적으로는' 전혀 해결되지 않았다. 하지만 위 문제점들을 덮거나 얼버무릴 수 있는 각종 '공학적인' 기술과 트릭이 등장하면서, ANN의 성능은 비약적으로 향상되었다. 가장 중요한 트릭은 '사전 훈련pre-training'이라는 개념이다. 망이 한 단계 걸러서 자기 자신을 출력하도록 미리 학습시켜, 신호의 기하급수적인 분산을 완화하는 것이다. 그리고 데이터를 나눠서 각각 일부 시냅스를 '끈' 뒤에 나중에 다시 합치는 트릭 등 각종 트릭이 개발되었고, 무엇보다 컴퓨터의 연산속도가 무지막지하게 빨라지면서 느린 수렴 속도가 그렇게까지 부각되지 않게 되었다.

아직 인공신경망 알고리즘은 인간 뇌의 성능의 발끝에도 미치지 못한다. 인간의 시각피질은 고작 몇백g밖에 무게가 안 되고 에너지원 역시 설탕 한 스푼만 주면 몇 시간이고 굴려먹을 수 있지만, 기계가 그 일을 하기 위해서는 집채만한 슈퍼컴퓨터로도 모자라다. 엄청 딸리는 소프트웨어의 효율을 압도적인 하드웨어로 찍어누르고 있는 셈. 도밍고스 교수의 말마따나 아직 기계학습에 대한 우리의 이해는 연금술 수준이라는 것이 정확할 것이다. 인공신경망은 만드는 사람도 쓰는 사람도 이게 왜 잘 작동하는지 잘 모를 만큼 부속과 출력의 상호관계가 천차만별이다. 그냥 결과가 나오니까 쓰는 거지(...) 특히 알고리즘의 성능 개선을 위해 접근하는 각종 시도의 경우 인간 뇌세포의 작동 방식과 전혀 관련이 없는 것은 물론이고, 이 방법을 사용하면 어떻게 성능이 나아지는지에 관한 이론적 근거가 조악하게라도 붙어 있는 경우가 훨씬 드물다. 그냥 '이렇게 하니까 학습이 더 잘 되더라.' 라는 말이 도는 편. ~~초끈이론? 고차원수학? 이게 무슨 뜬구름잡는 소리요~~ ~~규칙은 분명 있는데 너무 복잡해서 그냥 쓴다~~ ~~딥러닝배우러왔는데 미신만배운다카더라~~ 부족한 것이 많지만 그렇기에 발전할 여지가 많은 논리이며, 사람들이 인공신경망 알고리즘에 관해선 인간의 지능을 뛰어넘는 강인공지능, 발달을 추구하는 인공'지성'이 해결하기를 바라는 가장 큰 이유이기도 하다.

2013년 즈음부터 현재까지 가장 주목받고 있는 머신러닝 알고리즘이다.

종류

아래 '종류'라는 건 한 프로그램에 하나만 쓰이는 것이 아니다. 가령 이미지 처리와 언어 처리를 동시에 하기 위해 CNN과 RNN을 동시에 사용할 수도 있다.

Perceptron

Perceptron은 위에서 설명한 뉴런의 수학적 모델을 일컫는 용어이기도 하고, 최초로 제안된 신경망 프로그램 알고리즘 (1957)이기도 하다. 이 알고리즘은 이름 그대로 하나의 뉴런을 사용하며 학습 데이터를 가장 잘 설명할 수 있는 최적의 패러미터( <math>w, b</math> )값을 찾는다.

학습은 학습 데이터를 넣은 후 결과가 원하던 결과보다 크면 결과가 작아지게 패러미터를 조정하고 원하던 결과보다 작으면 커지게 패러미터를 조정하는 것을 반복한다. 이것으로 학습이 가능하다는 것은 [convergence theorem]이란 이름으로 증명이 되어 있다.

그러나 비선형함수를 학습할 수 없기에 이 방법이 사장됐다. 입력층과 출력층만 있는 퍼셉트론으로는 XOR 문제도 해결할 수 없다. 그 결과 MLP가 나오게 된다.

Multi Layer Perceptron (MLP)

말그대로 여러개의 Perceptron을 연결시켜 층(Layer)을 만들고, 이 층들을 중첩시켜 다층 (Multi Layer)으로 만든 것이다.

여러개의 Perceptron이 하나의 층(Layer)을 구성하며, 일반적으로 3~6개 정도의 층을 두며, 이들을 각각 입력층(Input layer), 은닉층(Hidden layer), 출력층(Output layer) 으로 구분하여 부른다. 필요이상으로 많은 층을 두는 것은 오히려 성능이 떨어진다고 알려져있다. 처음에는 중간에 존재하는 은닉층을 학습시킬 방법이 없기에 사장되었지만, 해결할 방법을 꾸준히 연구한 결과 역전파(backpropagation) 알고리즘 (1986)이 발명되어 사용할 수 있게 되었다. 신경망계통 알고리즘답게 초창기에 반짝하며 신드롬을 일으킬정도로 관심을 받았다. 그러나 사라지는 경사 문제 [* Vanishing Gradient Problem. MLP에서 층이 깊어질수록 역전파 알고리즘으로 의미있는 오류를 잘 전달하지 못하는 문제.], 과적합 문제 등이 있었고 당시 연산능력의 한계가 심했기 때문에 금새 사장되고 만다.

심층학습

심층학습 문서 참조


Convolutional Neural Network

1989년 인간의 시신경 구조를 모방해 만들어진 인공신경망 알고리즘. 다수의 Convolutional Layer(이떄의 작은 행렬을 필터라 부른다)으로 부터 특징맵(Feature map)을 추출하고 서브샘플링(Subsampling)을 통해 차원을 축소하여 이미지를 단순화 시킨 후 마지막 레이어에 완전 연결 계층 (Fully connected Layer)으로 이전 레이어의 처리결과를 연결하여 이미지를 분류한다. 이미지 분류에 유용하며, 이미지 외에도 사용할 수 있다.

Recurrent Neural Network

뉴런의 출력이 다시 입력으로 feedback되는 재귀적인 연결 구조를 갖는 신경망. 다층 퍼셉트론 신경망은 입력이 출력 방향으로만 활성화되고 은닉 뉴런이 과거의 정보를 기억하지 못한다는 단점이 있다. 이러면 입력이 들어온 문맥을 기억할 수 없다. 이런 단점은 시계열분석[* 시간에 따라 연속성을 지니는 문제. 텍스트 역시 연속된 문장과 단어로 구성되어 있기 때문에 RNN으로 잘 풀린다.] 관련 문제에서 매우 해롭다. RNN은 이런 단점을 해결했다.

앞에서 무슨 단어가 나왔는지의 문맥이 다음에 나올 단어를 예측(prediction)하는 문제를 푸는 데 유용하다. 이런 문제에는 음성 인식, 필기체 인식, 텍스처 인식이 있다. 또 분류에도 유용하다. 언어 모델은 말뭉치를 이용한 기계 번역에 도움이 되었다.

기존의 DNN(Deep Neural Networks)의 경우 각 layer마다 parameter들이 독립적이었으나, RNN은 이를 공유하고 있다. 따라서 현재의 출력 결과는 이전 time step의 결과에 영향을 받으며, hidden layer는 일종의 메모리 역할을 하게 된다.

RNN의 기본적 작동원리는 h,,t,, = g,,1,, ( x,,t,,U + Wh,,t-1,, + b,,x,,), o,,t,, = g,,2,, (Vh,,t,,+b,,h,,) 이다. g,,1,, g,,2,, : 비선형 활성화 함수 (Sigmoid, tanh 등) x,,t,,: 입력값 h,,t,,: t(시간)단계의 은닉변수 (hidden state) o,,t,,: t(시간)단계의 출력값 b: 편향 (bias) UVW: x,,t,, h,,t,, h,,t-1,,의 가중치 (weight) 위 식에서 입력 X = (x,,1,, , x,,2,, , x,,3,, , ... , x,,n,,)이 입력되면 o,,t,,가 출력된다.

변종으로 Bi-directional RNN이 있다. 이 모델은 과거 및 미래 상태도 반영한다. 언어 모델링을 할 때 앞뒤 단어를 모두 고려하게 되므로 정확성이 높아진다. 하지만 학습이 오랫동안 진행지면서 초기 학습이 잊혀질 단점이 있다.

하지만 전통적인 RNN 모형 및 Bi-directional RNN의 경우 Vanishing gradient problem을 지닌다. [* networks의 weight가 업데이트 되는 과정에서 gradient(weight에 대한 일종의 업데이트 비율)가 1보다 작은 값이 계속 곱해지면서 gradient가 사라지는 현상. 따라서, 먼 과거의 상태는 현재의 학습에 아무런 영향을 미치지 못하게 됨]

이 해결책으로 제시되고 있는 것이 다음 알고리즘들이다.

* LSTM
* elman NN: RNN에 context layer가 추가되어 있어 vanishing gradient problem을 어느 정도 해결했다. context layer는 hidden layer에서 나온 결과 중 기억하고 싶은 부분을 저장해 두었다가 필요할 때 꺼내올 수 있는 피드백 신호 역할을 한다.

Long Short Term Memory

1997년 나온 RNN의 개선판. 학습이 오래 지속될 경우 초기 학습한 내용이 잊혀진다는 단점이 있는데 이를 개선한 architecture이다. RNN의 입력, forget, 출력 부분에 Gate라는 셀들을 붙여 값을 조절한다. Forget gate는 이전 상태 정보를 저장할지를 결정하고, input gate는 입력되는 새로운 정보를 저장할지 결정하고, output gate는 갱신된 cell의 출력값을 제어한다.

망각 게이트 (forget gate)는 기존의 소자변수를 얼마나 잊어버릴지 결정한다. f,,t,, = σ (U^^f^^ x,,t,, + W^^f^^ h,,t-1,, + b^^f^^)이다. U^^f^^ x,,t,, + W^^f^^ h,,t-1,, + b^^f^^는 x,,t,,, h,,t-1,, , b의 가중합이다. f,,t,,는 이 가중합에 sigmoid함수(σ)를 씌운 것이다. 1은 모두 기억하겠다는 뜻이고 0은 모두 잊어버린다는 뜻이다.

강화학습

진화전략

2018년 진화전략 개발중 openAI

 * Reptile 파충류 : 확장 가능한 메타 - 학습 알고리즘   openAI 진화전략 버전1
 * 자율 학습을 통한 언어 이해 향상  openAI 진화전략 버전2 [[1]]

혼합모델

오토인코더

자기부호화기 (Autoencoder)

이미지 같은 복잡한 데이터는 높은 차원에 존재한다. 복잡한 데이터를 저차원으로 표현하면 처리가 간단해질 수 있다. 이 때문에 데이터의 차원을 축소하려는 노력들이 있어 왔다. 그 예로 Singular Value Decomposition (SVD) 혹은 Principal Component Analysis (PCA)가 있다. RNN 역시 시계열 데이터를 직접적으로 이용하는 것이 아니라 은닉 상태를 추론하여 문제를 풀어 나간다. 이렇게 차원을 축소하면 분류도 쉬워진다.

정보를 압축하는 인코더와 압축된 정보를 바탕으로 데이터를 복원하는 디코더를 만들 수 있다. 오토인코더는 데이터의 효율적인 인코딩을 찾는 방법이다.[* 이 문단의 출처: [이용한 동작 데이터 분석(2013)], [(2017.5)] ] 인공신경망에서 입력 레이어의 뉴런과 출력 레이어의 뉴런을 같은 개수로 두고, 입력과 출력이 같은 값이 되게끔 신경망을 학습시키게 된다. 이렇게 하고 은닉층에 있는 뉴런의 개수를 입력층의 뉴런의 개수보다 적게 하여 신경망을 구성하면, 입력층에서 은닉층으로 가는 과정은 인코딩 과정이 되고, 은닉층에서 출력층으로 가는 과정은 디코딩 과정이 된다. 이 때 은닉층의 각 뉴런의 활성화 정도는 입력 데이터의 새로운 코드가 된다. 선형 뉴런을 사용하면 오토인코더의 결과는 PCA와 거의 유사한 결과를 갖게 된다. 따라서 선형 뉴런 대신 시그모이드 뉴런을 사용함으로써 비선형적인 코딩을 얻을 수 있게 된다.

오토인코더를 한 번 사용하여 데이터를 한 번에 인코딩하는 방법으로 신경망을 구성할 수도 있지만, 뉴런의 개수가 크게 줄어들게 되면 신경망의 학습이 이루어지기 어렵고, 신경망의 표현 능력도 떨어지게 된다. 신경망의 표현 능력을 향상시키기 위하여 오토인코더를 쌓아 올리게 되는데 각각의 오토인코더는 입력 데이터를 표현할 수 있는 조금 더 좋은 코드를 찾게 되고 최상위 오토인코더는 매우 적은 수의 코드로 처음 주어진 입력값을 표현할 수 있게 된다.

단, 쌓아 올린 오토인코더는 일반적인 역전파(back propagation) 방법으로는 학습이 잘 되지 않는데 이를 극복하기 위해서 RBM(restricted Boltzmann machine)을 이용해 오토인코더를 미리 학습시키고, 미리 학습된 결과를 초기 추측으로 사용하여 역전파 방법으로 튜닝하면 쌓아 올린 오토인코더를 제대로 학습할 수 있게 된다.

반대로, 오토인코더의 디코더를 이용하면 축소된 공간에서 임의의 점에 해당하는 가상의 데이터를 원공간에서 생성해낼 수 있다. 결함 데이터가 일반적으로 부족한 고장진단 분야의 경우 (데이터 불평형 문제), 축소된 공간에서의 고장분포를 파악하여 이에 해당하는 다양한 고장데이터를 가상으로 생성할 때 사용할 수 있다. 이밖에도 정보를 압축하고 복원하는 구조로 Convolutional layer 를 통한 오토인코더 방법 (Convolutional Autoencoder), 베이지안적 사고를 바탕으로 신경망을 최적화시키는 방법 (Variational Autoencoder) 등이 제안되었다.

구체적인 방법은 다음과 같다. 입력 값 x가 주어지면 인코더를 통해 압축된 데이터 y로 변환하고 디코더를 통해 압축된 데이터 y를 z로 풀어낸다. y = f,,θ,,(x) = s (Wx+b) z = g,,θ,,(y) = s (W'y + b')

GAN

generative adversarial networks

[[2]] 제안된 방식. Classification (분류) 문제는 접근법을 discriminative 모델과 generative model로 나눌 수 있다.

* discriminative model (지도학습의 일종): 입력 x에서 출력 y로 가는 관계인 조건부확률 p(y|x)를 추정하려고 시도한다. 클래스를 분류하려 한다. 다중 회귀분석, 나이브 베이지안 분류기 등.
* generative model (비지도학습의 일종): p (x,y)을 추정하려고 한다. 분류 경계선 (decision boundary)을 만들려고 한다. 우도 (likelihood)나 사후확률 (posterior probability)를 사용한다. 밀도 기반 추정법들.

GAN은 두 모형을 함께 사용하고 서로 경쟁시킴으로써 정확도를 향상시키고자 한다.

[[3]] <math> \underset{G}{\min} \underset{D}{\max} V (D,G) = E_{x \sim P_{data}(x)} \,[log D(x)] </math> <math> + E_{z \sim P_{z}(z)} \,[log (1-D(G(z)))]</math>

위 식에서 G는 생성 모델, D는 분류 모델을 가리킨다. 좌변은 생성자가 구분자의 정확도를 최소화시키면서 구분자는 자신의 정확도를 최대화시키는 minimax 최적화 문제를 의미한다. 이 값은 0~1로 주어진다.

우변은 두 개의 항으로 나뉘어 있는데 이는 정보이론 (수학)에서 엔트로피를 최소화하는 것과 같다.[* Jensen-Shannon divergence 측도를 최소화한다고 말한다.] 우변 첫번째 항인 E ,,x~Pdata(x),, (log D(x))은 실제 데이터 x를 입력받았을 때 올바르게 '실제데이터'(D=1)라고 판단할 경우 최대화된다. 우변 두번째 항인 E,,z~Pz(z),, (log (1-D(G(z)))은 가상데이터 (z)를 입력받았을 때 올바르게 '가상데이터' (D=0)라는 것을 구분할 경우 최대화된다. 생성자는 그럴듯한 가상 데이터를 생성함으로써 두 번째 항을 최소화시키려고 노력한다.

오토인코더에는 단순히 데이터를 생성한다는 개념만 있었다. 하지만 GAN에는 경쟁이라는 요소가 들어간다. GAN이 오토인코더에 비해 양질의 데이터를 생성할 수 있다.

GAN에도 단점이 있다. 생성자가 그럴듯한 가상 데이터를 학습 초반부터 생성하기 힘들기 때문에 모델이 학습되지 않는 현상이 발생한다. 그리고 오토인코더가 주어진 데이터의 잠재 변수 (latent variable)를 추론할 수 있는 데 비해 GAN은 차원 축소의 개념이 존재하지 않는다.

DCGAN

위에서 설명한 딥 CNN과 GAN을 통합한 개념. [A. (2016)] [* Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks. doi : arXiv:1511.06434] 논문에서 시작되었다.

각 레이어에 Convolution layer를 사용한다. 단, CNN과 달리 Pooling layer, Fully connected layer는 사용하지 않는다. 레이어 계산 결과에 Batch Normalization를 사용한다. 활성 함수(Activation function)으로 ReLU 대신 LeakyReLU를 사용한다.

Generator는 랜덤 입력 ‘z’가 의미있는 잠재 특징 (latent feature)이 되도록 학습한다. 이 랜덤 입력의 의미가 무엇인지 우리는 알 수 없다.

학습법

경사 하강법

[include(틀:상세 내용, 문서명=기계학습)]

확률적 경사 하강법

Adam

Nadam

공학적인 기술

* 미니배치
* [[4]] (2015말)
* ReLU (Rectified Linear Unit): Sigmoid 함수에 비해 Vanishing gradient problem을 해결했다. 
* 빅 데이터 프로세싱: 과적합 문제를 다량의 학습 데이터 확보를 통해 해결했다.
* Dropout: 과적합 문제를 해결하기 위해 일부 레이어의 데이터를 제거하는 기술. (1-p) 확률로 노드를 학습에서 무시하여, 노드에 연결된 edge가 없는 것으로 간주하고 매 주기마다 랜덤하게 갱신한다.
* 관련 라이브러리: Caffe, Torch, Theano, RNNLIB, CUDA-ConvNet, Pylearn, DL4J, 텐서플로우 등.
* 관련 계산 환경: CUDA, Apache Spark

문제점

* 학습이 일정하게 진행되지 않는다.
* 일반 프로그램에 비해 높은 사양을 요구한다. CPU나 싸구려 GPU로만 구동한다면 시간이 많이 걸린다. 비싼 GPU를 이용한 GPGPU가 필요하다. CPU, RAM, GPU 성능의 영향을 많이 받는데 기업에서 딥러닝 개발용으로 쓰는 워크스테이션은 천만원 정도다. 
* 정확한 딥러닝의 메커니즘은 블랙박스 형태. 인간의 신경망을 본떠서 답이 나오게끔 만들다보니 수학적인 증명이 완료되지 않았다. 시냅스가 역치를 넘기고 학습하면서 일련의 작용을 해, 인간의 감각적 반응을 이끌어 내는 것을 흉내내고, 이 시냅스들이 뭉치고 뭉쳐서 거대한 뇌를 이루어 판단이나 계산을 하게 되는 것을 흉내내는 것에 가깝다. 물론 실제 뇌 매커니즘과 딥러닝의 매커니즘에는 어느정도 차이가 있지만, 아이디어를 신경망에서 얻은 인공신경망이다보니 비슷한 문제를 안고있는 것이다.
* 아직까지 데이터를 정제하는데 사람의 손이 많이들어가는 등 상당한 노가다가 필요하다.

기술 동향

* 한국의 인공신경망 기술은 현재로써는 처참한 상태다. 2011~2015년 NIPS에 1,845편의 논문이 발표되었는데 미국 1,037건, 영국 110건, 프랑스 103건, 캐나다 97건, 독일 85건, 중국 73건, 스위스 61건, 이스라엘 44건, 일본 43건, 호주 29건, 인도 24건, 싱가포르 16건, 오스트리아/이탈리아/한국 14건 등이었다. 기관별로 보면 스탠포드 대학교 84건, 카네기 멜런 대학교 66건, MIT 63건, UC 버클리 61건, 텍사스 오스틴 59건, 유니버시티 컬리지 런던 41건 등이며, 한국 기관 중 10건 이상 발표한 곳은 없다.

기타

* 인공신경망과 유전 알고리즘을 결합하여 만드는 모델도 있다. 인공신경망을 다양하게 구성한 뒤 학습시켜 최적의 결과를 찾는다.

관련 문서

* 인공지능
* 기계학습
* 뉴로모픽 컴퓨팅
* Apple(기업) [* 뉴럴 엔진을 애플 A11칩과 A12칩 에 탑재하여 기계학습을 인공신경망으로 수행하도록 도입하였다.]
 * iPhone 8
 * iPhone 8 Plus
 * iPhone X
 * iPhone XS
 * iPhone XS Max
 * iPhone XR


 * Apple(기업)/AP 일람

[각주] [include(틀:문서 가져옴, title=기계학습, version=239)] 분류:인공지능