레이블이 딥러닝인 게시물을 표시합니다. 모든 게시물 표시
레이블이 딥러닝인 게시물을 표시합니다. 모든 게시물 표시

2016년 5월 27일 금요일

딥러닝 메모

딥러닝을 이해하기 위해 참조한 내용들을 정리한다.


역사 

사람의 신경망을 본 뜬 인공신경망 기술이 핫 이슈가 된다.
XOR 문제에서 좌절을 안긴다.

(미래에서 온 인류 저항군인) 민스키 교수의 두 마디에 의해 암흑기로 들어간다.
* 다계층 퍼셉트론 (MLP)를 사용하면 풀수 있다.
* 지구상에 누구도 MLP 노드를 학습시킬 좋은 방법을 찾지 못했다.

폴의 오차역전파법 논문에서 MLP의 노드 학습 방법을 찾는다.
크게 관심을 끌지 못한다.

힌튼 교수에 의해서 재발견 되고 관심이 촉발 되지만,
많은 수의 은닉 층에서 학습 능력이 떨어지는 단점과 함께 제 2의 암흑기를 겪는다.

지속적인 연구 끝에 적절한 초기 값(가중치)을 부여하는 것을 통해서 문제를 해소한다.
관심 촉발을 위해서 “딥러닝”이라는 단어를 사용한다.

다양한 과제 영역에서 성과들이 나오면서 전성기를 맞이한다.


**
신경세포 - Neuron
신경계를 구성하는 주된 세포이다.

자극전달 - impulse
일정 이상의 자극 ( 역치 : Threshold )이 주어 지면 전기 신호를 발생한다.

연접 - synapse
한 뉴런에서 다른 세포로 신호를 전달하는 연결 지점이다.

인공신경망 - artificial neural network
생물학적 신경망에서 영감을 얻은 통계학적 알고리즘이다.

딥 러닝 - deep learning
여러 비선형 변환기법의 조합을 통해 높은 수준의 추상화를 시도하는 기계학습(machine learning) 알고리즘의 집합으로 정의 되며, 큰틀에서 사람의 사고방식을 컴퓨터에게 가르치는 기계학습의 한 분야라고 이야기 할 수 있다.

기계학습 - Machine Learning
어떠한 태스크(T)에 대해 꾸준한 경험(E)을 통하여 그 T에 대한 성능(P)를 높이는 것, 이것이 기계학습이라고 할 수 있다. - by Tom M. Mitchell

오차역전파법 - back-propagation
네트워크에 기대되는 모든 가중치를 통해 손실함수의 값이 최소화가 되는 최적화 가중치를 추출하는 방법론이다.

손실함수 - loss function
사건(기술적으로 표본 공간의 한 요소)을 그 사건과 관련된 경제적 손실을 표현하는 실수로 사상하는 함수이다.

합성곱 신경망 - Convolutional Neural Network : CNN
최소한의 전처리(preprocess)를 사용하도록 설계된 다계층 퍼셉트론(multilayer perceptrons)의 한 종류이다.
영상, 음성 분야 모두에서 좋은 성능을 보여준다

퍼셉트론 - perceptron
인공 신경망의 한 종류로서 각 노드의 가중치와 입력치를 곱한 것을 모두 합한 값이 활성함수에 의해 판단되는데, 그 값이 임계치(보통 0)보다 크면 뉴런이 활성화되고 결과값으로 1을 출력한다. 뉴런이 활성화되지 않으면 결과값으로 -1을 출력한다.


참고

인공신경망 백서

인공신경망 동영상

인공신경망 아이디어 ( A -> B, C -> D )


2016년 3월 18일 금요일

tensorflow 접근 퀵가이드

본문은 알파고로 유명세를 타고있는 tensorflow에 대한 접근 과정에 필요한 정보들을 요약한다.
tensorflow를 편하게 사용하기 위해서 만들어진(wrapped) skflow를 통해서 tensorflow를 다루는 간략한 예제와 기존의 유명한 학습 기법과 성능을 비교해 본다.

1. skflow 소개 및 DNN 사용 예제

skflow는 파이썬의 대표적인 기계학습 라이브러리인 scikit-learn과 구글에서 공개한 딥러닝 도구 tensorflow를 조합한 라이브러리다.
익숙한 scikit-learn의 인터페이스를 통해서 tensorflow를 참조 모델 셋으로 사용하기 때문에, 기존 기계학습 사용자들이 편하게 접근 할 수 있게 도와준다.

사용 방법:
# 텐서 플로우 DNN 설정
clf = skflow.TensorFlowDNNClassifier(hidden_units=h, n_classes=n)
# 학습 데이터 입력
clf.fit(mf.train_data, mf.train_target, logdir='log_dnn')
# 실험 데이터의 실제 결과와 모델의 예측치와 비교
score = metrics.accuracy_score(mf.test_target, clf.predict(mf.test_data))
print("Accuracy: %f with TF_DDN" % score)
# 모니터링 보기
command$ tensorboard --logdir=log_dnn/2016-03-18_18-15-08
# tensorboard에서 Loss 추이 화면 (MNIST 학습 과정)
**
hidden_units은 복수개의 은닉 계층을 뜻한다.
예를 들면, [10,20]의 입력 값은 10개의 unit과 20개의 unit으로 이루어진 2개의 은닉계층을 표현한다. 최적의 값을 위한 은닉계층의 수나 유닛의 수는 실험적인 결과를 통해 유추는 것으로 보인다. (좀 더 학습이 필요한 부분이다.)