들어가는 글: 요즘 부쩍 글발(?)이 올라와서 이래저래 쓰고 싶은 것이 많아졌습니다. 재미없는 글이지만 많은 분들이 읽어주셔서 힘을 내서 요즘 핫한 '인공지능'에 대해서 잠깐 얘기드려려고 합니다.
저는 안드로이드 개발자입니다. 이래저래 휴대폰에 필요한 앱을 개발하고 있습니다.
요즘 인공지능, AI, 신경망, 머신러닝, 딥러닝이 핫하다고 하기에..
저도 하반기에는 한번 공부해보려고 가장 얇은 책을 몇 권 읽어보았습니다.
<텐서플로 첫걸음>
<신경망 첫걸음>
을 읽었습니다. @.@ 알듯 모르겠다는 결론..
그리고 다시 <밑바닥부터 시작하는 딥러닝>을 읽어봤습니다.
이 책은 좋네요.. 번역도 잘 되어 있고 문체도 좋고 예제 코드도 간결합니다.
저는 파이썬을 잘 모릅니다. 새로운 언어까지 배우면서 하려니 좀 부담스럽기는 하지만.. 배워가면서 몇가지 정리해보도록 하겠습니다.
## 책을 요약하는 것이 목적이 아니기 때문에 전해드리고 싶은 얘기를 두서없이 써보도록 하겠습니다 ##
솔직히 현업 개발자로서.. 이것을 왜 공부해야 하나 싶기도 했습니다.
많은 사람들이 AI를 공부하고 있고 (특히 이공계에 왠만한 IT 관련 대학원생들은 연구실을 가리지 않고 공부하는 것 같아요) 하지만 이것을 배워서 실제로 어떤 무언가를 만드는게.. 쉬워보이지는 않았습니다.
1) 인공지능 모델을 만드는 것이 어렵다
2) 인공지능을 가르칠 데이터를 얻는 것이 어렵다
3) 인공지능이 잘 만들어졌는지 알기 어렵다
4) 내가 만든 인공지능이 지금은 잘 돌아도 앞으로 '범용성'을 가지고 더 잘돌지 검증할 수 없다.
5) 결국은... '수학'에 좌절하게 된다
6) 모델이 조금만 커지면 다뤄야 하는 수의 규모가 훨씬더 커진다
등등
주변에서 공부하시는 분들께 직간접적으로 들은 얘기입니다. 제가 체험한 얘기는 아닙니다.
저는 '인공지능'을 모릅니다. 파이썬도 모릅니다.
그래서 공부해보려구요.
그나마 세번째 책을 읽으면서 조금씩 개념에 눈을 뜨게 된 것은 '퍼셉트론'과 '신경망'의 차이였습니다.
퍼셉트론: (위키) https://en.wikipedia.org/wiki/Perceptron
In machine learning, the perceptron is an algorithm for supervised learning of binary classifiers
(머신러닝에서 퍼셉트론은 0 혹은 1을 발생시키는 지도 학습 알고리즘이다)
@.@ 이게 뭐여~
퍼셉트론은
1) 여러개의 input을 가지고 있음
2) input과 퍼셉트론 사이에는 가중치(weight)가 있음
=> input이 증폭되거나 축소될 수 있음
3) 여러 input은 모두 가중치와 함께 합(sum)으로 모아짐
3) output으로 0 혹은 1을 내보냄
=> 그래서 binary classifiers라고 부릅니다.
그러면 왠만큼 다 다루었는데 이제 한가지 용어가 남았습니다.
지도 학습(Supervised Learning)이란 무엇인가?
한마디로 정답을 가지고 훈련을 시키는 방법을 의미합니다. 그 정답을 label이라고 합니다. 가장 간단한 예로 자동차 표지판을 구별한다면 input 이미지와 함께 그것의 정답(label)을 달아서 학습시키는 것입니다. 그렇게 모델을 키워가는 방법입니다.
이제 신경망(Neural Networks)은 무엇인가? 를 살펴보겠습니다.
(위키) https://en.wikipedia.org/wiki/Artificial_neural_network
Artificial neural networks (ANNs) or connectionist systems are computing systems inspired by the biological neural networks that constitute animal brains. Such systems learn (progressively improve performance) to do tasks by considering examples, generally without task-specific programming.
((인공)신경망은 동물의 뇌를 이루는 생물학적 신경망에서 영감을 받아 만든 컴퓨팅 시스템이다. 그러한 시스템은 일반적으로 과업의 세부사항을 프로그래밍하지 않고도 사례들을 학습하여 적극적으로 성능을 향상시킨다.)
앗.. 매우 어렵습니다. 한개씩 살펴보도록 하겠습니다.
1) 동물의 뇌를 흉내내었다.
=> 즉 뉴런과 그것의 네트워크로 신경망을 구성하게 됩니다.
2) 세부사항을 프로그래밍하지 않는다
=> 프로그래머가 동작 알고리즘을 기술하지 않는다
3) 사례를 학습한다.
=> 학습시켜야 한다. (지도학습이건 혹은 비지도 학습이건.. unsupervised learning)
비지도 학습은 아직 저도 잘 모릅니다. 공부하는데로 업데이트하겠습니다.
앞서 말씀드린 퍼셉트론에 대해 신경망은 좀더 복잡한 구조를 가집니다.
1) 신경망은 다층 구조를 가지고 있다.
2) 신경망의 각 노드는 뉴런(퍼셉트론)이라고 부른다.
3) 뉴런은..
- 여러 input을 가진다
- 각 input에는 가중치가 붙어있다.
- 각 input은 뉴런으로 들어갈때 가중치와 곱하여 합으로 들어간다
- 편향(bias)를 가질 수 있다.
4) 다층구조는 아래의 계층으로 구별됩니다.
- 입력층 (input layer) , 1개
- 은닉층 (hidden layer) , N개
- 출력층 (output layer) , 1개
그림으로 나타내면 아래와 같습니다.
[출처] : http://terms.naver.com/entry.nhn?docId=830577&cid=42344&categoryId=42344
NEXT..
다음은 신경망이 어떻게 '학습'을 할 수 있는지 알아보도록 하겠습니다.
'학습'에 대해서 얘기하려면 기본적으로 알아야 하는 단어들이 있습니다.
기본 개념에 대해서 먼저 알아보고 그것을 통해 단순한 신경망을 학습시켜보도록 하겠습니다.
저도 완전 초보입니다.
우리함께 AI 초보를 탈출해봅시다.
감사합니다.
2017.7.24