티스토리 뷰
딥러닝의 기본 개념: 시작과 XOR 문제~Back-propagation과 2006/2007 '딥'의 출현
johh 2019. 5. 6. 15:32딥뉴럴 넷트워크 아이디어가 어떻게 시작되었고, 어떤 문제가 있었으며, 그 문제들을 어떻게 해결되었는지에 대해 알아보자.
처음엔 우리의 뇌를 연구했고 우리의 뇌가 굉장히 복잡하게 연결되어 있다는 것을 알게 되었다. 연결된 부분 부분을 자세히 보았더니 뉴런이라고 불리는 unit이 정말 단순하게 동작하더라. 이렇게 단순하게 동작하는데 우리가 어떻게 생각할 수 있을까?
어떤 인풋으로 들어오는 어떤 값들의 가중치와 bias의 합들이 어떤 값이 되면 활성화가 되고 아니면 활성화가 되지 않더라.
이 아이디어에 착안하여, 이런 뉴런은 기계적으로 수학적으로 만들 수 있겠다라고 생각함. 그렇게 만들어 낸 모델이 Activation functions이라고 한다.
왼쪽 것들을 모은다면 오른쪽과 같이 여러개의 출력을 동시에 낼 수 있는 어떤 기계가 될 수 있다.
이것들을 하드웨어를 가지고도 만들었었다.
이것을 인공지능이라고 생각했고 사람들에게 많은 관심을 받자 연구하는 분들이 사람들에게 허황된 약속을 하기 시작했다. 예를들어 58년도 뉴욕타임즈를 보면,
이렇게 하면서 많은 사람들에게 관심을 끌게 되었고, 어느정도 성공도 했다.
그 당시에는 And/Or 이라는 로직을 풀 수 있으면 이것들을 조합하여 생각할 수 있는 기계를 만들 수 있다고 생각하였고 이것을 예측하도록 하는것이 큰 화두였다.
이것을 성공하고 사람들이 이제는 할 수 있겠다라고 생각하고 있었는데, 찬물을 끼얹은 사건이 있었다. 그것은 역시나 정말 단순하지만 XOR이라는 형태의 로직이다. 매우 단순한 로직인데, 기계에서 이것을 나오지가 않는다는 것이다. linear하게 어떻게 선을 그어도 100% 정확하게 나오지 않는다. 어떻게 선을 그어도 손실률이 너무 높아.
사람들이 이 문제를 풀기 위해 무수히 도전한다.
민스키라는 교수님은 이런 모습이 딱하여(?) XOR은 지금의 기술으로는 풀 수 없다라는 것을 수학적으로 증명해버렸다. 그러면서 하는 얘기가 한개로는 할 수 없고, 몇 개를 합치면(MLP) 할수도 있어. 그런데 큰 문제가 각각에 들어가는 weight과 bias를 학습을 시킬 수가 없다.
이로인해 많은 사람들이 포기하게 되고, 뉴럴 넷트워크의 발전은 짧게는 10년 길게는 20년정도 후퇴하게 된다.
그런데 86년에 이 문제가 해결된다. 사실 74년에 해결되었는데 폴이란 사람의 박사 논문에서이다. w와 b를 이용해 주어진 입력을 가지고 출력을 만들어 낼 수 있다. 출력이 우리가 가지고 있는 값과 다른 출력일 경우 w,b를 조절해야 한다. 앞에서는 이것을 조절하는 것이 어려운 것이었다. 'Backpropagation'이라는 알고리즘이 개발되었는데, 출력에서 error를 발견해서 뒤에서 앞으로 점차 가면서 조절하는것은 어떤가에 대한 것이었다. 어떻게 보면 단순한 알고리즘인데, 1974년에 워낙 분위기가 좋지 않아 아무도 관심을 갖지 않았다. 70년도 후반에 Minsky교수를 만났는데, 이 교수님이 아무런 관심을 갖지 않아 이 논문은 묻힐뻔 했다. 그래도 버리기 아깝다고 생각하여 82년에 논문을 발표했다. 86년에 Hinton이라는 사람이 똑같은 방법을 독자적으로 만들어냈다.(재발견, rediscovery)
또 LeCun 교수는 고양이에게 어떤 그림을 보도록 한 다음 시신경에 있는 뉴런이 어떻게 동작하는지 확인해 봤는데, 그림에 따라 작동하는 뉴런이 다르다는 것을 발견. 우리가 그림을 볼 때 신경망 전체가 그림을 보는게 아니라 부분 부분의 신경망들에 의해 전해지고 나중에 그것들이 조합되는 것이 아닐까? 라는 생각을 하였다.
이 분이 Convolutional Neural Networks라는 이론을 만들었는데, 그림이 있으면 이것을 한번에 모두 neural network에 집어 넣는게 아니라, 그러면 너무 복잡해 지기 때문에, 부분부분을 잘라서 보낸다음 나중에 합친다. 알파고도 Convolution Neural Networks를 사용하였다. 미국에서는 손으로 쓴 책을 자동으로 읽어내는 기계를 만드는데도 사용하였다. 90년대 후반에는 10~20%의 책이 이런 방식으로 읽어내졌다.
자동 주행하는 차에 대한 어느정도의 성공, 터미네이터에 나오는 neural network cpu라는 대사를 보면 인공지능에 대한 관심이 얼마나 높았는지를 알 수 있다.
그러던중 안타깝게도 backpropagation이라는 알고리즘이 몇 개의 알고리즘에서는 잘 작동되지만, 길면 알고리즘의 에러를 뒤에서부터 조정해 나갈시 앞으로 갈수록 에러의 의미가 거의 사라져 버린다. 입력의 부분이 정말 중요한 부분인데 입력 부분에서 에러의 의미가 사라진다는 것은 길면 길수록 성능이 떨어진다는 것이다.
한편으로 많은 알고리즘(svm, randomforest 등등)들이 나오기 시작했고, 어떻게 보면 neural-network보다 훨씬 간단한 알고리즘이 더 잘 작동되었다. 심지어 1995년 LeCun 교수도 neural-network보다 간단한 알고리즘이 더 잘 작동된다고 이야기를 할 정도였다.
그리고 너무 복잡하기 때문에 neural-network는 침체기에 들어가게 된다. 두번째 침체기에 들어가게 되니 포기하는 사람들이 더 많아졌다.
캐나다에 CIFAR라는 연구소가 있는데, 이 연구소는 당장 돈이 되지 않고 활용도가 없어도 연구를 계속할 수 있도록 격려하였다. 이런 정책때문에 neural-network 침체기에 있던 Hinton은 canada로 이주하게 된다.
이런 딥러닝의 발전은 CIFAR라는 단체의 도박과 같은 결정 덕분이다.
이 단체의 후원 덕분에 10년 후에 Hinton교수와 Yoshua Bengio 교수가 큰 논문 두 편을 발표하게 된다.
이 두 논문의 내용은 우리가 지금까지 아주 딥한 신경망은 학습할 수 없다고 했었는데, 알고보니 각각의 weight값을 주고 학습시켰는데 이 초기값을 우리가 잘못줬다는 것이다. 즉, 이 초기값을 잘 주는게 중요하다는 것이다.(2006) 그리고 2007년 논문에는 초기값을 주는게 중요하다는 것을 확인하고 한 걸음 더 나아가서 깊게 신경망을 구축하면 굉장히 복잡한 문제를 풀 수 있다는 것을 보였다. 그리고 사람들이 neural-network라는 이름으로 하면 쳐다보지도 않으니 Deep Nets, Deep Learning으로 바꿨다고 한다.
이때부터 다시 신경망에 관심을 갖고 사람들이 연구하기 시작했다. 정말 주목을 받게 된 계기는 ImageNet이라는 챌린지 사이트가 있는데, 컴퓨터에게 그림을 맞추게 하는 것이었다. 컴퓨터 비젼계에서는 굉장히 중요한 문제로 다루고 있었고, 그것이 2010년에는 오답률이 20% 후반대에서 2011년 1~2%정도 감소 하였다. 그리고 이 기술을 써먹기 위해서는 10% 미만의 오답률을 갖어야 하는데, 이런 감소율로 봤을때는 단순계산으로 10년 이상은 기다려야 한다고 생각했다. 그러던중 hinton교수의 연구실에 있던 알렉스라는 학생이 논문을 썼는데 오류가 26.2% > 15.3%로 줄게 되었다. 그렇게 계속 줄어들게 되어 2015년도에는 3프로대 오답률까지 줄게 된다. 이때 그림을 열심히 공부한 스탠포드 학생의 오답률이 5%였는데, 컴퓨터가 사람의 인식률을 따라잡게 된 것이다.
뿐만 아니라 한 걸음 더 나아가서 그림을 설명도 할 수 있게 되었고,
DeepAPI learning이라는 API를 자동으로 예측해주는 기술도 있다.
파일을 카피하고 내가 원하는 디렉토리에 저장하고 싶다라고 말만 쓰더라도, 어떤 api를 써야 하는지 어떤 순서로 api를 써야 하는지 나열해준다. 이것들을 넣고 변수만 채워주면 된다. 딥러닝 기술을 사용하지 않았을때는 25%의 정확도로 사용할 수 없는 기술이었는데 딥러닝을 이용해 이 시스템을 만들었더니 65% 정도의 정확도까지 올라갔다.
뿐만 아니라 최근 baidu에서는 소음이 많은 곳에서 사람이 하는 말을 90%까지 인식하는 시스템을 개발했다.
딥러닝을 이용해 게임을 하는데 사람보다 훨씬 잘하고,
알파고도 딥러닝을 일부 사용해서 사람의 대표를 이기게 되었다.
그러면서 Hinton이 뒤를 돌아보며 과거에는 왜 안되었는지 4가지 정도로 밝혔다.
그럼 나는 연구자도 아니고 컴퓨터 공학도 하지 않는다면 상관이 없는 지식일까?
실제로 이런 기술들이 이미 우리들에게 사용되고 있다. 그 중 한 예로, 유튜브의 자막기능, 페이스북의 피드 추천, 구글 검색엔진(관심있어 할만한 정보를 추천), 넷플릭스-아마존 추천시스템 등이 있다.
당신이 연구자나 학생이라면 이 분야에 과감히 뛰어들기를 권장한다.
'beginner > 파이썬 딥러닝 기초' 카테고리의 다른 글
XOR 문제 딥러닝으로 풀기 (0) | 2019.05.06 |
---|---|
Tensor Manipulation (0) | 2019.05.06 |
Meet MNIST Dataset (0) | 2019.05.06 |
Training/Test dataset, learning rate, normalization (0) | 2019.05.05 |
Training/Testing 데이터 셋 이론 (0) | 2019.05.05 |