이번 시간에는 인공 신경망으로 알려진 딥러닝의 개념을 이해하고 신경망의 가장 기본 단위인 퍼셉트론에 대해 배워보겠다.
우선 인공지능, 머신러닝, 딥러닝의 관계에 대해 확인해보고 시작하겠다.
인공지능이라는 것은 말 그대로 인공적으로 사람의 지능을 구현하는 컴퓨터 시스템을 만드는 것을 의미한다. 이러한 기술을 실현하는데는 다양한 방법론들이 있고 그 중 하나가 머신러닝이다.
이런 머신러닝 기술도 다양한 기술들이 있고 그 중 한 가지 기술이 딥러닝이라고 보면 된다.
이제 본격적으로 딥러닝이란 무엇인지 알아보도록 하겠다.
딥러닝은 인공신경망에 기반해 사람의 사고방식을 가르치는 방법이다.
여기서 인공신경망이란 생물학의 신경망에서 영감을 얻은 학습 알고리즘으로 사람의 신경 시스템을 모방했다.
사람의 신경 시스템은 뉴런이라는 가장 작은 정보처리 단위로 이루어져있다.
이 신경 세포 뉴런들이 무수히 많이 연결되어 자극을 처리한다.
그럼 딥러닝은 어떻게 발전되어 왔을까?
1958년도에 딥러닝에 가장 기본적인 단위인 퍼셉트론이 개발되면서 딥러닝의 역사가 시작된다. 퍼셉트론은 1969년도에 와서 가장 큰 단점들이 나오게 되고 딥러닝의 기술의 빙하기라는 것이 처음 찾아오게 된다. (1969~1986)
하지만 80년대 와서 이것을 해결할 수 있는 여러 가지 이론들이 나오게 되고 딥러닝의 기본적인 이론들이 확립되게 된다.
그럼에도 불구하고 이 이론들의 단점들이 다시 나오게 되면서 두 번째 빙하기가 오게 된다.
90년대부터 딥러닝 기술들은 학계나 산업계에서 주목받지 못하고 있었다.
그러던 2012년, 일련의 사건을 통해 다시 주목받게 된다.
그 사건은 이미지넷이라고 하는데 이 이미지넷은 백만개 이미지 데이터를 바탕으로 해서 그 이미지가 어떤 이미지인지 구분해내는 챌린지였다.
여기서 GPU를 사용한 딥러닝 모델인 AlexNet이 나오게 된다.
이 AlexNet은 기존의 정확도를 한 순간에 끌어올리게 됐고 이를 통해 학계와 산업계에서 다시 딥러닝 기술이 주목을 받게되었다.
이후 계속 발전되어 현재 다양한 분야에서 연구되고 있고 활용되고 있다.
아래와 같이 딥러닝 기술들은 적용되고 있다.
원래 알파고 모델은 딥러닝 모델이 아니고 강화학습모델이다.
근데 여기에 딥러닝이 붙으면서 기존의 강화학습 성능보다 훨씬 더 우월한 성능을 보여주게 되었다.
이제부터 퍼셉트론에 대해 알아볼 것이다.
근데 들어가기에 앞서 신경망 이전의 연구가 어떻게 되어왔는지부터 확인해보겠다.
사람이 직접 패턴을 파악하고, 이것을 바탕으로 예측을 하는게 이전의 연구방식이었다.
하지만 인공지능의 신경망은 사람이 직접 파악하던 것을 대신하게 된다. 이것이 신경망의 큰 특징이다.
1958년도에 퍼셉트론이 처음 등장하게 되는데 이 퍼셉트론은 딥러닝의 가장 기본적인 단위라고 볼 수 있다. 이 기본적인 단위만으로도 어느 정도의 분류, 회귀가 가능한데 이것이 어떻게 되는지 확인해보겠다.
그러면 실질적으로 퍼셉트론이 어떻게 생겼는지 그 구조에 대해서 보도록 하겠다.
인간의 뉴런(신경 세포) 같은 경우 x1,x2,...,xn의 가지 돌기(Inputs)로 신호가 들어와 y1,y2,...,ym의 축삭 말단(Outputs)을 통해 다른 뉴런으로 전달된다.
이 신경 세포를 본따서 만든 것이 오른쪽의 퍼셉트론이다.
똑같이 왼쪽에 Input이 있고 오른쪽에 Output이 있다. 보면 합쳐지는 부분이 있고 Activation function등이 있다.
가중치 w1, w2는 들어오는 입력값인 x1, x2 신호에 대해서 얼만큼 신호를 증폭해 줄지에 대한 부분이다. 이 가중치는 입력값에다 곱해주게 된다.
아래보면 w0라는 것이 있다. 이것은 bias인데 bias는 입력되는 값에 상관없이 무조건 입력되는 값이다. 이 w0에는 어떠한 값도 들어올 수 있고 이 값은 들어오는 입력값에 상관없이 들어오는 값이다.
이렇게 구한 값들을 모두 더한다. (w0 + w1x1 + w2x2)
그리고 마지막으로 활성화 함수(Activation function)에 이 값을 넣고 거쳐야만 최종적인 y값이 나온다.
그렇다면 이제 이 활성화 함수가 무슨 일을 하는지 알아보겠다.
활성화 함수는 들어온 값이 0을 기준으로 0보다 크거나 같으면 1로 매핑하고 0보다 작으면 0으로 매핑해준다.
지금까지 본 과정들을 가지고 예시를 들어보면 위와 같이 작동되어 1이 Output으로 나가게 된다.
이제 퍼셉트론이 무엇을 하는 것인지를 알아보겠다.
이를 위해 예제를 하나 가지고 보겠다.
X1과 X2라는 두 가지 데이터가 있고 학습 여부를 학습 한 경우 1, 학습 하지 않은 경우를 0으로 데이터를 얻었다. 이를 이용해 퍼셉트론이 어떻게 동작하는지 보겠다.
x1은 신작 드라마 수였고 x2는 여가 시간이었다.
이렇게 들어왔을 때 x1에 대해 w1이 의미하는 것은 드라마 시청 욕구로 인해 학습에 미치는 영향이다. 즉, 신작 드라마가 나오는 수에 따라 얼마나 영향을 받는지를 w1로 표현하는 것이다.
다음으로 w2는 여가시간이 주어졌을 때 그 여가시간에 따라 공부하고 싶은 정도이다.
마지막으로 bias는 신작드라마의 수, 여가 시간과는 관계없이 다른 영향을 받지 않고 학습을 해야한다는 의지이다.
이제 이것들을 바탕으로 학습 여부가 1인지 0인지 판단하는 것이 퍼셉트론 모델이라고 볼 수 있다.
이제 실제로 값을 넣어 확인해보도록 하겠다.
입력되는 값에 w0, w1, w2를 어떻게 설정하느냐에 따라서 예측하는 결과가 바뀔 수 있다는 것을 알 수 있다.
그래서 가중치인 w들을 조절함으로써 실제 y값을 잘 예측할 수 있게 만드는 것이 퍼셉트론의 동작이다.
이것을 시각화하면 위와 같이 표현된다.
우선 X1은 신작 드라마 수이고 X2는 여가 시간이다.
그리고 점들은 데이터들이다.
보라색 영역은 학습을 하지 않은 영역이고 초록색 영역은 학습을 한 영역이다.
빨간색 선은 w0 + w1X1 + w2X2 = 0 인 부분이다. 이 직선을 얼만큼 잘 구했느냐가 퍼셉트론을 얼마나 잘 구현했는지에 대한 지표가 된다.
다시 정리하면 퍼셉트론은 선형 분류기로써 데이터 분류가 가능하다.
오른쪽 그림과 같이 강아지와 고양이를 분류할 때 선을 기준으로 분리한다.
이렇게 선을 통해 분류하기 때문에 선형 분류기라고 부른다.
하지만 퍼셉트론에도 큰 단점이 있다.
하나의 선으로 분류할 수 없는 경우들이 있다는 문제이다.
이러한 분류 문제 때문에 69년도부터 AI의 첫 번째 겨울이라고 부르는 빙하기가 찾아오게 된다.
실습 예제 1 – 퍼셉트론 작동 예시 구현하기)
신작 드라마 수(x1)와 확보한 여가 시간(x2)에 따른 엘리스 코딩 학습 여부(y)를 예측하는 모델을 구현했을 때, 아래와 같은 변수들을 가정한다.
답 :
실행 결과 :
실습 예제 2 – 퍼셉트론 만들기)
위 그림과 같은 퍼셉트론을 구현하라.
(m=4로 설정. 따라서 입력값은 x1, x2, x3, x4로 총 4개, 가중치도 w1, w2, w3, w4로 총 4개이다.)
가중치 w0에 대한 입력값은 1이므로 두 값이 곱해진 값은 상수 w0이고 이는 곧 Bias이다.
신호의 총합 output을 정의하고, output이 0이상이면 1을, 그렇지 않으면 0인 y를 반환하는 활성화 함수를 작성해 perceptron() 함수를 완성하라.
답 :
실행 결과 :
실습 예제 3 – 퍼셉트론의 알맞은 가중치 찾기)
주어진 데이터를 완벽히 분리하는 퍼셉트론을 직접 구현해보아라.
단층 퍼셉트론을 직접 구현해보며 적절한 가중치(Weight)와 Bias 값을 찾아보자.
perceptron() 함수의 입력으로 들어갈 가중치 값을 입력하라.
(w 리스트 안의 값들은 순서대로 w0, w1, w2에 해당된다.)
답 :
실행 결과 :
아까 단층 퍼셉트론의 분류 한계 때문에 69년도부터 AI의 첫 빙하기가 왔다고 했다.
그런데 이것이 86년도에 끝나게 되는데 그 해결의 주요 원인은 다층 퍼셉트론 덕분이다.
다층 퍼셉트론을 기반으로 딥러닝의 가장 기본적인 이론들이 발전하게 된다.
그럼 이제 80년대에 어떤 이론들이 만들어졌고 다층 퍼셉트론이 무엇인지 알아보도록 하겠다.
단층 퍼셉트론은 선형적인 문제만 해결할 수 있다는 단점이 있었다.
그렇다면 이 단층 퍼셉트론을 여러 층으로 쌓아보면 어떨까?
이렇게 여러 단층 퍼셉트론이 쌓인 것을 다층 퍼셉트론이라고 한다.
영어로는 Multi Layer Perceptron이라고 하며 간단하게 MLP라고 부르기도 한다.
단층 퍼셉트론에서는 선 하나로만 분류를 할 수밖에 없었지만 그 결과들을 모두 조합하면 또 다른 새로운 결과를 만들 수 있다는게 다층 퍼셉트론의 아이디어이다.
이 다층 퍼셉트론에서 말하는 히든층(Hidden Layer)은 입력층과 출력층 사이의 모든 Layer를 말한다. (입력되는 구간과 출력되는 구간 사이에 있는 모든 퍼셉트론 노드들을 Hidden Layer라고 한다.)
그래서 이 Hidden Layer가 많아지면 딥러닝이라는 표현을 하기도 한다.
딥러닝이라는 표현은 사람들마다 정의하는 것이 조금씩 다르긴 한데 위와 같이 다층 퍼셉트론이 점점 복잡해진 경우를 딥러닝이라고 생각하면 된다.
이렇게 Hidden Layer가 증가하면 분류할 수 있는 방법이 많아지므로 성능이 더 좋아진다는 장점이 있다.
하지만 단점도 있는데 바로 가중치이다. 단층 퍼셉트론에서는 많아봐야 n+1개의 가중치만 구하면 됐었다. 하지만 다층 퍼셉트론은 그보다 훨씬 많은 가중치를 필요로 하고 이를 구하는 것도 쉽지 않기 때문에 모델을 마냥 깊게 만들 수는 없다.
지금까지 단층 퍼셉트론의 단점을 극복했던 다층 퍼셉트론에 대해 배웠고 이 다층 퍼셉트론이 복잡해지면 딥러닝이라고 부른다는 것을 알게되었다.
다음 시간에는 딥러닝을 어떻게 학습에 사용하고 가중치를 어떻게 구하는지에 대해서 알아보도록 하겠다.
'인공지능 공부' 카테고리의 다른 글
[2021 NIPA AI 교육 - 응용 / 딥러닝] 03 다양한 신경망(이미지, 자연어 처리 CNN, RNN) (0) | 2021.08.30 |
---|---|
[2021 NIPA AI 교육 - 응용 / 딥러닝] 02 텐서플로우와 신경망 (0) | 2021.08.25 |
[2021 NIPA AI 교육 - 응용 / 머신러닝] 04 지도 학습 - 분류 (0) | 2021.08.22 |
[2021 NIPA AI 교육 - 응용 / 머신러닝] 03 지도 학습 - 회귀 (0) | 2021.08.21 |
[2021 NIPA AI 교육 - 응용 / 머신러닝] 02 데이터 전 처리하기 (1) | 2021.08.20 |