[인공지능 이야기] 생물학적 신경망, 인공신경망, 퍼셉트론, MLP
인공신경망은 두뇌의 신경세포, 즉 뉴런이 연결된 형태를 모방한 모델이다. 인공신경망(ANN, Artificial Neural Network)은 간략히 신경망(Neural Network)이라고도 한다. 딥러닝을 살펴보기 전에 먼저 인공신경망에 대해서 살펴보자. 딥러닝은 인공신경망이 발전한 개념으로서 먼저 인공신경망에 대해서 이해한 뒤 딥러닝을 살펴보는 것이 개념을 이해하기 쉬울 것이라 생각한다.
생물학적인 뉴런과 인공신경망
생물학적인 뉴런
인간의 뇌는 1000억 개가 넘는 신경세포(뉴런)가 100조 개 이상의 시냅스를 통해 병렬적으로 연결되어 있다고 한다.(참고2) 각각의 뉴런은 수상돌기(Dendrite)를 통해 다른 뉴런에서 입력 신호를 받아서 축색돌기(Axon)를 통해 다른 뉴런으로 신호를 내보낸다. 시냅스(Synapse)는 뉴런과 뉴런을 연결하는 역할을 한다. 출력신호는 입력된 신호가 모여서 일정한 용량을 넘어설 때 일어난다.
"신경세포는 시냅스를 거쳐서 수상돌기(dendrite)로 받아들인 외부의 전달물질을 세포체에 저장하다가, 자신의 용량을 넘어서면 축색돌기(axon)를 통해 외부로 전달물질을 내보낸다고 알려져 있다."(참고4)
인공신경망 뉴런
인공신경망 뉴런 모델은 생물학적인 뉴런을 수학적으로 모델링한 것이다. 즉, 생물학적인 뉴런이 위의 그림과 같이 다른 여러개의 뉴런으로부터 입력값을 받아서 세포체(cell body)에 저장하다가 자신의 용량을 넘어서면 외부로 출력값을 내보내는 것처럼, 인공신경망 뉴런은 여러 입력값을 받아서 일정 수준이 넘어서면 활성화되어 출력값을 내보낸다.
위 그림에서, 생물학적인 뉴런의 수상돌기(Dendrite) 역할을 하는 것이 x1, x2, x3와 이들 각각의 가중치(파라미터) 값 θ1, θ2, θ3으로 구성된 입력 부분이다. 이들 입력을 통한 출력값은 hθ 함수로 표현되며, 활성화 함수(Activation Function)라고도 불린다. 생물학적인 뉴런의 세포체가 일정한 용량을 넘어서면 외부로 출력값을 보내는 것처럼, 활성화 함수 또한 일정 값을 넘어서면 1, 그 이하는 0 값을 출력하기 위해 시그모이드 함수(Sigmoid function)를 사용한다.
시그모이드 함수(Sigmoid function)는 활성화 함수로 많이 사용되(었으)며, 모든 실수값을 0과 1 사이의 값으로 변환시킨다. 입력값 x와 각각의 입력값에 대한 가중치(weight) 세타값(θ)으로 계산된 결과를 시그모이드 함수에 입력하여 0과 1사이의 값으로 바꾸며, 보통 0.5를 기준으로 0.5 미만은 0, 0.5이상은 1에 대응되도록 하여 활성화 함수(Activation Function)로 사용한다.
인공신경망 뉴럴 네트워크는 뉴런들을 여러개 쌓아서 만들 수 있다. 아래 그림들은 Layer1(input layer, 입력층), Layer2(hidden layer, 은닉층), Layer3(output layer, 출력층)로 구성된 뉴럴 네트워크이다.
인공신경망 발전 역사, 퍼셉트론(Perceptron), MLP
인공신경망은 1943년에 Warren McCulloch와 Walter Pitts가 발표한 논문(A logical calculus of the ideas immanent in nervous activity)에서 인간의 신경 구조를 복잡한 스위치들이 연결된 네트워크로 표현할 수 있다고 최초로 제안한 데서 유래한다고 한다.(참고1)
퍼셉트론(Perceptron)
오늘날 인공신경망(그리고 딥러닝)에서 이용하는 구조는 1958년 Frank Rosenblatt에 의해 제안되었다. Rosenblatt은 퍼셉트론(Perceptron)이라는 선형 분류기를 제안했는데, 이는 입력(input)과 가중치(weight)들의 곱을 모두 더한 뒤 활성화 함수(Activation function)를 적용해서 그 값이 0보다 크면 1, 0보다 작으면 -1을 출력하는 선형분류기 구조였다.(참고1) (여기서는 -1~1 구간의 값을 출력하는 Sigmoid 함수를 사용)
현재 사용하는 딥러닝도 이 구조를 여러개의 노드와 여러개의 레이어로 확장했다는 것이 다를 뿐 퍼셉트론과 근본적인 구조는 같다.(참고1)
많은 사람들이 로젠블랏(Rosenblatt)의 퍼셉트론을 이용하여 진짜 인간과 같은 인공지능을 만들 수 있을 것이라 기대했으나, 1969년 마빈 민스키(Marvin Minsky)와 Seymour Papert가 퍼셉트론의 한계를 수학적으로 증명함으로써 그러한 기대는 급속히 사그라들었다. Minsky와 Papert에 따르면 퍼셉트론은 단순한 선형 분류기에 불과하여 OR와 AND와 같은 분류는 할 수 있으나, XOR 분류를 수행할 수 없다. 즉, 퍼셉트론을 이용하여 간단한 문제는 풀 수 있으나 복잡한 문제를 풀 수 없다는 것이 수학적으로 증명되었으며, 이로 인해 인공지능에 대한 모든 투자와 연구가 중단된 시기인 '인공지능 겨울'이 시작되었다.(참고1)
다층 퍼셉트론(MLP, Multi-Layer Perceptron)
퍼셉트론의 한계를 극복할 수 있는 방법은 1986년에 제시되었다. McClelland, James L., David E. Rumelhart, and Geoffrey E. Hinton이 은닉계층(Hidden Layer)이라는 중간층을 추가하여 선형분류기라는 한계를 극복한 다층 퍼셉트론(MLP, Multi-Layer Perceptron)을 제시하였다.(책 “Parallel Distributed Processing”) 즉, 퍼셉트론을 여러 층으로 쌓으면 XOR 문제를 해결할 수 있다는 것을 보여주었다.(참고1)
하지만 퍼셉트론을 여러 층으로 쌓을수록 학습하기가 어려운 문제가 발생했는데, 다층 퍼셉트론을 개발한 사람들(McClelland, James L., David E. Rumelhart, and Geoffrey E. Hinton)이 역전파 알고리즘(Backpropagtion Algorithm)을 제안하여 이 문제를 해결하였다. 역전파 알고리즘은 순방향(Feed forward) 연산 후 예측값과 정답 사이의 오차를 후방(backward)으로 다시 보내주면서 학습시키는 방법이다.(참고1)
이론적으로는 하나의 중간층으로 이루어진 신경망만 있으면 어떤 함수라도 만들 수 있다고 알려져 있다.
(참고4)
참고로, 마빈 민스키 또한 MLP로 XOR 문제를 해결할 수 있다는 것을 알았으나, 학습을 통해 XOR 문제를 해결할 가중치들을 구할 방법을 찾을 수 없다는 한계를 지적했었다. 역전파 알고리즘이 그 학습 방법을 제시해 준 것이다.
Minksky's book was best known for arguing that 1) We need to use an MLP with a hidden layer even to represent simple nonlinear functions such as the XOR mapping; and 2) no one on earth had found a viable way to train MLPs with hidden layers good enough even to learn such simple functions.(참고9)
인공신경망 예제
논리연산자 AND, OR, NOT
앞에서 퍼셉트론(Perceptron)이 AND와 OR는 구현할 수 있다고 했는데, 어떻게 하는지 알아보자.
AND 연산자는 x1과 x2가 모두 1일 때만 결과값이 1이고 나머지 경우(0과 0, 0과 1, 1과 0)는 모두 0을 출력하도록 가중치 값을 조절하면 된다.
아래 퍼셉트론 예제에서 x0, x1, x2에 대응하는 가중치를 -30, 20, 20으로 지정하면,
x1=0, x2=0일 경우, -30 + 20 * x1 + 20 * x2=-30. Sigmoid(-30) = 0.
x1=0, x2=1일 경우, -30 + 20 * x1 + 20 * x2=-10. Sigmoid(-10) = 0.
x1=1, x2=0일 경우, -30 + 20 * x1 + 20 * x2=-10. Sigmoid(-10) = 0.
x1=1, x2=1일 경우, -30 + 20 * x1 + 20 * x2=10. Sigmoid(10) = 1
따라서, 가중치를 -30, 20, 20으로 지정하면 퍼셉트론을 이용하여 AND 연산자를 구현 가능하다.
마찬가지로, OR 연산자도 구현 가능하며, 이때 파라미터는 -10, 20, 20으로 정하면 된다. 아래를 참고하여 각자 계산해보기 바란다.
XOR를 계산할 때 NOT 연산자도 필요하며, 아래와 같이 계산된다. 참고로, NOT 연산자는 1을 입력하면 0을, 0을 입력하면 1을 출력한다.
MLP를 이용한 논리연산자 XOR 구현 방법
XOR는 x1과 x2 둘 중에 하나만 1일 때 1이고, 둘 다 0 또는 1일 경우는 0을 출력한다.
XOR 연산자가 중요한 이유는 뉴럴 네트워크를 이용해서 복잡한 작업을 할 때 필요하기 때문이다. 아래 그림과 같이 복잡하게 분포된 O와 X 데이터를 구분하는 모델을 만들기 위해서는 XOR 연산이 꼭 필요하다. 예를들어, 배 속에 생긴 혹이 암인지를 판별한다고 해보자. x1을 혹의 크기, x2를 혹의 색깔이 진한 정도, O가 암인 경우이고, X가 암이 아닌 경우라고 하자.(이건 어디까지나 필자의 가정이다.) 아래 데이터를 보면 혹이 암인 경우는 혹의 크기가 크고 색깔이 연하거나 크기가 작고 색깔이 진한 경우이고, 이를 검출하기 위해서는 XOR 연산을 구현할 수 있어야 한다.
이제 XOR 연산자를 구현해보자. XOR는 논리연산자 하나로 구현할 수는 없고, AND, OR, NOT 연산자를 연결해야 구현할 수 있다. 즉, 아래와 같이 AND, OR, NOT에 해당하는 퍼셉트론(Perceptron)을 여러 층으로 쌓아서 만들 수 있다.(참고10)
검증을 해 보면, OR, AND, NOT 연산자를 활용하여 XOR를 만들 수 있음을 아래 표에서 확인할 수 있다.
다음은 좀 더 실질적인 예제로서, 인공신경망을 활용하여 자율주행차를 만드는 방법을 알아보자. 아래 그림에서, 30x32로 된 자동차 도로 이미지가 입력값이며 출력값은 핸들 위치정보이다. 즉, 맨 왼쪽(좌회전)부터 직진, 맨 오른쪽(우회전)까지의 핸들 위치를 출력으로 한다. 전체적으로는 입력층, 은닉층, 출력층 등 3개의 층으로 구성된 인공신경망으로 자율주행차를 구현했다.(참고4)
실제, 비슷한 방법으로 자율주행차를 구현한 내용을 확인할 수 있다. 다음 영상을 보면 자율주행차가 어떻게 가능한지 감이 올 것이다. 앨빈(ALVINN)이라는 자율주행차인데, 1989년에 이미 자율주행차를 연구했다는 사실이 놀랍기만 하다. 물론, 이 예제는 단순히 도로의 모양만을 참고하여 구현한 것인데, 현재는 도로 표지판, 신호등 등 모든 것을 인식하고 자율적으로 운전하는 훨씬 발전된 자율주행차가 연구중이다.
https://www.youtube.com/watch?v=IaoIqVMd6tc
원래는 더 좋은 영상이 있었는데, 어떠한 이유에서인지 영상이 삭제되었다. 혹시나 나중에 복원될까 해서 원래 있었던 영상의 주소도 소개한다.(https://www.youtube.com/watch?v=ilP4aPDTBPE, 제목은 Neural Network-Based Autonomous Driving by Dean Pomerleau)
실제 논문을 보면, ALVINN의 구조는 입력층, 은닉층, 출력층 등 3개의 층으로 구성되어 있으며, 입력층은 30x32로 된 비디오 카메라 이미지와 8x32로 된 레이저 이미지 등 1217개의 입력유닛으로 구성되며, 은닉층은 29개 유닛, 출력층은 46개의 유닛으로 구성되어 있다.(참고11)
지금까지 생물학적 뉴런부터 시작해서 퍼셉트론, 다층 퍼셉트론 등 인공신경망이 발전해온 역사에 대해서 살펴보았다. 다음에는 인공신경망에서 발전해서 최근 엄청나게 유행하고 있는 딥러닝에 대해서 살펴보자.
[인공지능 이야기 시리즈]
인공지능 개념(AI) | 인공지능 정의, 유형. 분야, 역사
머신러닝 개념(Machine Learning) | 머신러닝 정의, 종류, 예시, 통계와 비교
머신러닝, 기계가 학습한다는 의미 | 머신러닝 과정에 구체적으로 무슨 일이 일어나는가?
인공신경망 개념(Artificial Neural Network) | 생물학적 신경망, 인공신경망, 퍼셉트론, MLP
딥러닝 개념(Deep Learning) | 딥러닝 등장 3대 사건, 기본 개념, CNN, RNN, 장단점
인공지능에 대해서 더 궁금하시면, 제가 쓴 아래 책을 참고하세요.
http://www.yes24.com/Product/Goods/110044822
참고자료
[1] http://solarisailab.com/archives/1206
[2] https://blog.skhynix.com/270
[3] https://www.yumpu.com/en/document/view/33756198/axon-dendrite-cell-body-neuron-nerve-cell-anatomy-synapse
[4] 2017년 특허청 심사관 신기술 교육(제4차 산업혁명과 인공지능) 교재(조성배(연세대 교수))
[5] https://en.wikipedia.org/wiki/Biological_neuron_model
[6] Andrew Ng 교수, Coursera Machine Learning 강의,
https://www.coursera.org/learn/machine-learning/
[7] https://en.wikipedia.org/wiki/Artificial_neural_network
[8] https://en.wikipedia.org/wiki/Activation_function,
https://en.wikipedia.org/wiki/Sigmoid_function
[9] Automatic Differentiation: Applications, Theory, and Implementations, edited by H. Martin Bücker, George Corliss, Paul Hovland, Uwe Naumann, Boyana Norris, 21p
(books.google.co.kr)
[10] https://blog.naver.com/pmw9440/221401111139
[11] https://papers.nips.cc/paper/95-alvinn-an-autonomous-land-vehicle-in-a-neural-network.pdf