introduction to deep learning and neural...
TRANSCRIPT
Introduction to Deep Learning and Neural Networks
Vision Modeling Lab.Division of Electrical Engineering
Hanyang University, ERICA Campus
2
Contents
Machine learning
Artificial Neural Network (ANN)
신경망의역사와최근의딥러닝
Python & Numpy
• Python & Numpy란?
• 예제 PyTorch
• Linear Regression
• 예제
PyTorch를이용한수기(Handwritten)숫자분류기구현
Machine learning
3
머신 러닝(영어: machine learning) 또는 기계 학습(機械 學習)은 인공 지능의 한 분야로, 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야를 말한다.가령, 기계 학습을 통해서 수신한 이메일이 스팸인지 아닌지를 구분할 수있도록 훈련할 수 있다.1959년, 아서 사무엘은 기계 학습을 “컴퓨터에게 배울 수 있는 능력, 즉 코드로 정의하지 않은 동작을 실행하는 능력에 대한 연구 분야”라고 정의하였다.
-Wikipedia
■ UnSupervised learning▶ Clustering▶ Underlying Probability Density Estimation
Machine learning
4
■ Supervised learning▶ Classification▶ Regression
■ SemiSupervised learning
■ Reinforcement learning
SVM(Classification)
군집화(Clustering)
참고문헌: Wikipedia
최근 딥러닝의 결과
5
http://news.unist.ac.kr/kor/column_202/https://devblogs.nvidia.com/photo-editing-generative-adversarial-networks-2/https://github.com/mitmul/chainer-fast-rcnnhttps://youtu.be/Dlc4ylsAuSs
■ 뉴런의 구조
▶ 입력 신호의 합이 역치를 넘으면 출력단에 신호(자극)을 보냄.
인공신경망(ANN)
6
입력신호
출력신호
사진 출처: https://m.blog.naver.com/PostView.nhn?blogId=samsjang&logNo=220948258166&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F
■ 퍼셉트론 구조
▶ 입력단에 가중치를 곱한 것의 합이 activation function의 역치를 넘기면 1을 그렇지 않으면 -1을 넘겨주도록 모델링함.
인공신경망(ANN)
7
x1
x2
x3
xi
…
w3
wi
w1
w2
… 𝜮𝜮
Activation function
𝛴𝛴𝑤𝑤𝑖𝑖𝑥𝑥𝑖𝑖 = 𝒘𝒘𝑻𝑻𝒙𝒙
■ OR 분류 문제
퍼셉트론의 동작 예제
8
a = (0,0), 𝑡𝑡𝑎𝑎 = −1
b = (1,0), 𝑡𝑡𝑏𝑏 = 1
c = (0,1), 𝑡𝑡𝑐𝑐 = 1
d = (1,1), 𝑡𝑡𝑑𝑑 = 1a b
c d
Solution!
ab
c d+-
d(x,y)
d(x,y) = 𝑦𝑦 + 𝑥𝑥 − 12
= 0
*엄밀히 unique한 sol은 아님
■ OR 분류 문제
퍼셉트론의 동작 예제
9
ab
c d+-
d(x,y) = 𝑦𝑦 + 𝑥𝑥 − 12
= 0
x
y
1
1𝜮𝜮
Activation function
𝛴𝛴𝑤𝑤𝑖𝑖𝑥𝑥𝑖𝑖 = 𝒘𝒘𝑻𝑻𝒙𝒙
-0.51
퍼셉트론 구조에 적용!
𝜏𝜏 𝑠𝑠 = �+1, 𝑠𝑠 ≥ 0−1, 𝑠𝑠 < 0
■ Does it really work?
퍼셉트론의 동작 예제
10
𝑑𝑑 𝑎𝑎 = 0 + 0 −12
= −12→ 𝜏𝜏 𝑑𝑑 𝑎𝑎 = −1
𝑑𝑑 𝑏𝑏 = 0 + 1 −12
=12→ 𝜏𝜏 𝑑𝑑 𝑏𝑏 = 1
𝑑𝑑 𝑐𝑐 = 1 + 0 −12
=12→ 𝜏𝜏 𝑑𝑑 𝑐𝑐 = 1
𝑑𝑑 𝑑𝑑 = 1 + 1 −12 =
32 → 𝜏𝜏 𝑑𝑑 𝑑𝑑 = 1
a = (0,0), 𝑡𝑡𝑎𝑎 = −1
b = (1,0), 𝑡𝑡𝑏𝑏 = 1
c = (0,1), 𝑡𝑡𝑐𝑐 = 1
d = (1,1), 𝑡𝑡𝑑𝑑 = 1a b
c d
It works!
■ 퍼셉트론 학습이란?▶ 훈련집합 𝑿𝑿 = 𝒙𝒙𝟏𝟏, 𝒕𝒕𝟏𝟏 , 𝒙𝒙𝟏𝟏, 𝒕𝒕𝟏𝟏 , … , 𝒙𝒙𝑵𝑵, 𝒕𝒕𝑵𝑵 이 주어졌을 때 이들을 옳게분류하는 퍼셉트론을 찾는 것. 즉, 𝒘𝒘와 𝑏𝑏를 찾는 문제가 됨.
퍼셉트론 학습
11
x1
x2
x3
xi
…
w3
wi
w1
w2
… 𝜮𝜮
Activation function
𝛴𝛴𝑤𝑤𝑖𝑖𝑥𝑥𝑖𝑖 = 𝒘𝒘𝑻𝑻𝒙𝒙
■ 일반적인 패턴인식의 학습알고리즘의 설계 3단계
▶ 1.분류기 구조를 정의하고 분류 과정을 수학적으로 표현.• Ex) 단일 퍼셉트론 구조 등
▶ 2.분류기의 품질을 측정할 수 있는 비용함수 𝐽𝐽(𝜃𝜃)를 정의.
• Ex) 𝐽𝐽(𝜃𝜃) = 𝑓𝑓(𝑤𝑤𝑇𝑇𝒙𝒙 + 𝑏𝑏) − 𝑦𝑦 , 𝑓𝑓 𝑥𝑥 :𝑎𝑎𝑐𝑐𝑡𝑡𝑎𝑎𝑎𝑎𝑎𝑎𝑡𝑡𝑎𝑎𝑎𝑎𝑎𝑎 𝑓𝑓𝑓𝑓𝑎𝑎𝑐𝑐
▶ 3. 𝐽𝐽(𝜃𝜃)를 최대 최소로 하는 𝜃𝜃를 찾기 위한 알고리즘을 설계.• 𝐽𝐽 𝜃𝜃 ≈ 0인 𝜃𝜃를 찾아야 하며, 최적화 알고리즘으로 gradient descent등이 있음.
퍼셉트론 학습
12
■ Main idea
Gradient descent method
13
𝜃𝜃
𝐽𝐽(𝜃𝜃)
𝐽𝐽𝑚𝑚𝑖𝑖𝑚𝑚(𝜃𝜃)
𝜃𝜃
𝐽𝐽(𝜃𝜃)
𝐽𝐽𝑚𝑚𝑖𝑖𝑚𝑚(𝜃𝜃)
𝑎𝑎𝑎𝑎𝑡𝑡𝑎𝑎𝑎𝑎𝑖𝑖𝑝𝑝𝑎𝑎𝑎𝑎𝑎𝑎𝑡𝑡
사진출처: https://rasbt.github.io/mlxtend/user_guide/general_concepts/gradient-optimization/
■ Gradient descent method는 미분가능해야 사용 가능!
■ Sigmoid function ▶ 비선형 함수▶ 전구간 미분 가능함.▶ 계산이 간단하며, 미분한 값 역시 계산이 간단함.▶ Binary mode, Bipolar mode가 있음.
Sigmoid
14
Binary mode Bipolar mode
사진 출처: https://www.intechopen.com/books/speech-technologies/nonlinear-dimensionality-reduction-methods-for-use-with-automatic-speech-recognition
■ Sigmoid 보다 더 좋은 성능을 보이는 Relu function!
■ Relu function▶ Sigmoid function의 미분함수의 양단은 0에 가까워지므로, 학습이 진행될수록 gradient가 0에 수렴해질 가능성이 생긴다. Relu function은
▶ 미분 계산이 매우 간단해짐▶ 학습속도가 매우 빨라진다 (빠르게 수렴)▶ Input node의 반이 0의 값을 가지게 됨으로써 hidden node가 sparse해지는 효과를 갖고, over fitting 문제를 완화해준다.
Relu function
15
사진 출처: http://bluediary8.tistory.com/2
■ Update rule
▶ 𝜃𝜃 ℎ + 1 = 𝜃𝜃 ℎ − 𝜌𝜌 ℎ 𝜕𝜕𝐽𝐽 𝜃𝜃𝜕𝜕𝜃𝜃
, 𝜌𝜌 ℎ : 학습률
• 𝒘𝒘 ℎ + 1 = 𝒘𝒘 ℎ + 𝜌𝜌(ℎ) 𝜕𝜕𝐽𝐽 𝜃𝜃𝜕𝜕𝒘𝒘
• 𝑏𝑏 ℎ + 1 = 𝑏𝑏 ℎ + 𝜌𝜌(ℎ) 𝜕𝜕𝐽𝐽 𝜃𝜃𝜕𝜕𝑏𝑏
• �𝒘𝒘 ℎ + 1 = �𝒘𝒘 ℎ + 𝜌𝜌(ℎ)∑𝒙𝒙𝒌𝒌∈𝑌𝑌 𝑡𝑡𝑘𝑘 �𝒙𝒙𝒌𝒌
Gradient descent method
16
∵) �𝒘𝒘 = 𝒘𝒘𝑏𝑏 , �𝒙𝒙𝒌𝒌 = 𝒙𝒙𝒌𝒌
1
𝐽𝐽(𝜃𝜃) = ∑𝑥𝑥𝑘𝑘∈𝑌𝑌(−𝑡𝑡𝑘𝑘)(𝒘𝒘𝑻𝑻𝒙𝒙𝒌𝒌 + 𝑏𝑏)• Y는 책정된 𝜃𝜃가 틀리게 분류한 샘플 집합.• 𝑡𝑡𝑘𝑘가 양수이며, 오 분류된 경우, 𝒘𝒘𝑻𝑻𝒙𝒙𝒌𝒌 + 𝑏𝑏 < 0 → −𝑡𝑡𝑘𝑘 𝒘𝒘𝑻𝑻𝒙𝒙𝒌𝒌 + 𝑏𝑏 > 0• 𝑡𝑡𝑘𝑘가 음수이며, 오 분류된 경우, 𝒘𝒘𝑻𝑻𝒙𝒙𝒌𝒌 + 𝑏𝑏 > 0 → −𝑡𝑡𝑘𝑘 𝒘𝒘𝑻𝑻𝒙𝒙𝒌𝒌 + 𝑏𝑏 > 0• 따라서, 𝜃𝜃가 적절히 분류하는 경우에는 cost function이 줄어들게 되어있음.
▶ g𝑟𝑟𝑎𝑎𝑑𝑑𝑎𝑎𝑟𝑟𝑎𝑎𝑡𝑡 𝑑𝑑𝑟𝑟𝑠𝑠𝑐𝑐𝑟𝑟𝑎𝑎𝑡𝑡 𝑚𝑚𝑟𝑟𝑡𝑡ℎ𝑎𝑎𝑑𝑑• 𝜃𝜃 ℎ + 1 = 𝜃𝜃 ℎ − 𝜌𝜌 ℎ 𝜕𝜕𝐽𝐽 𝜃𝜃
𝜕𝜕𝜃𝜃, 𝜌𝜌 ℎ : 학습률
• 𝜕𝜕𝐽𝐽 𝜃𝜃𝜕𝜕𝒘𝒘
= ∑𝒙𝒙𝒌𝒌∈𝑌𝑌 −𝑡𝑡𝑘𝑘 𝒙𝒙𝒌𝒌
• 𝜕𝜕𝐽𝐽 𝜃𝜃𝜕𝜕𝑏𝑏
= ∑𝒙𝒙𝒌𝒌∈𝑌𝑌 −𝑡𝑡𝑘𝑘
• 𝒘𝒘 ℎ + 1 = 𝒘𝒘 ℎ + 𝜌𝜌(ℎ)∑𝒙𝒙𝒌𝒌∈𝑌𝑌 𝑡𝑡𝑘𝑘 𝒙𝒙𝒌𝒌• 𝑏𝑏 ℎ + 1 = 𝑏𝑏 ℎ + 𝜌𝜌(ℎ) ∑𝒙𝒙𝒌𝒌∈𝑌𝑌 𝑡𝑡𝑘𝑘
• �𝒘𝒘 ℎ + 1 = �𝒘𝒘 ℎ + 𝜌𝜌(ℎ)∑𝒙𝒙𝒌𝒌∈𝑌𝑌 𝑡𝑡𝑘𝑘 �𝒙𝒙𝒌𝒌
OR 분류기 학습 예제
17
∵) �𝒘𝒘 = 𝒘𝒘𝑏𝑏 , �𝒙𝒙𝒌𝒌 = 𝒙𝒙𝒌𝒌
1
OR 분류기 학습 예제
18
Init: 𝒘𝒘 0 = −0.5,0.75 𝑇𝑇 , 𝑏𝑏 0 = 0.375→ 𝑑𝑑 𝑥𝑥 = −0.5𝑥𝑥1 + 0.75𝑥𝑥2 + 0.375 … (1)→ 𝑌𝑌 = 𝑎𝑎, 𝑏𝑏→ 𝑤𝑤 1 = 𝑤𝑤 0 + 0.4 𝑡𝑡𝑎𝑎𝑎𝑎 + 𝑡𝑡𝑏𝑏𝑏𝑏 = −0.5
0.75 + 0.4 − 00 + 1
0 = −0.10.75 ,
𝑏𝑏 1 = 𝑏𝑏 0 + 0.4 𝑡𝑡𝑎𝑎 + 𝑡𝑡𝑏𝑏 = 0.375 + 0.4 ∗ 0 = 0.375
→ 𝑑𝑑 𝑥𝑥 = −0.1𝑥𝑥1 + 0.75𝑥𝑥2 + 0.375 … (2)→ 𝑌𝑌 = a→ 𝑤𝑤 2 = 𝑤𝑤 1 + 0.4 𝑡𝑡𝑎𝑎𝑎𝑎 = −0.1
0.75 + 0.4 − 00 = −0.1
0.75 ,𝑏𝑏 2 = 𝑏𝑏 1 + 0.4 𝑡𝑡𝑎𝑎 = 0.375 − 0.4 = −0.025
→ 𝑑𝑑 𝑥𝑥 = −0.1𝑥𝑥1 + 0.75𝑥𝑥2 − 0.025 … (3)→ 𝑌𝑌 = b→ 𝑤𝑤 3 = 𝑤𝑤 2 + 0.4 𝑡𝑡𝑏𝑏𝑏𝑏 = −0.1
0.75 + 0.4 10 = 0.3
0.75 ,𝑏𝑏 3 = 𝑏𝑏 2 + 0.4 𝑡𝑡𝑏𝑏 = −0.025 + 0.4 = 0.375
1st generation
2nd generation
3rd generation
참고문헌: OR 분류기 학습예제 - 패턴인식 (오일석)
𝐽𝐽(𝜃𝜃) = ∑𝑥𝑥𝑘𝑘∈𝑌𝑌(−𝑡𝑡𝑘𝑘)(𝒘𝒘𝑻𝑻𝒙𝒙𝒌𝒌 + 𝑏𝑏)
OR 분류기 학습 예제
19
→ 𝑑𝑑 𝑥𝑥 = 0.3𝑥𝑥1 + 0.75𝑥𝑥2 + 0.375 … (4)→ 𝑌𝑌 = 𝑎𝑎→ 𝑤𝑤 4 = 𝑤𝑤 3 + 0.4 𝑡𝑡𝑎𝑎𝑎𝑎 = 0.3
0.75 + 0.4 − 00 = 0.3
0.75 ,𝑏𝑏 4 = 𝑏𝑏 3 + 0.4 𝑡𝑡𝑎𝑎 = 0.375 − 0.4 = −0.025
→ 𝑑𝑑 𝑥𝑥 = 0.3𝑥𝑥1 + 0.75𝑥𝑥2 − 0.025 … (5)
a b
c d
5
4
3
1
2
4th generation
5th generation
■ XOR등의 선형분리 불가능한 상황을 다룬다면?
다층 퍼셉트론의 필요성
20
a b
c d ??
ab
c d
+-
+-
두개의 직선으로 분류 문제 해결!단일 직선으론 분류 불가능(선형분리 불가)
sampleFeature vector 1st
process2nd
process
x1 x2 percep1 percep2 percep3
a 0 0 -1 +1 -1
b 1 0 +1 +1 +1
c 0 1 +1 +1 +1
d 1 1 +1 -1 -1
XOR문제와 MLP
21
ab
c d
+-
+-
perceptron1
perceptron2
XOR문제와 MLP
22
x
y
1
1𝜮𝜮
Activation function
𝛴𝛴𝑤𝑤𝑖𝑖𝑥𝑥𝑖𝑖 = 𝒘𝒘𝑻𝑻𝒙𝒙
-0.51
x
y
-1
-1𝜮𝜮
Activation function
𝛴𝛴𝑤𝑤𝑖𝑖𝑥𝑥𝑖𝑖 = 𝒘𝒘𝑻𝑻𝒙𝒙
1.51x
y
1
1𝜮𝜮
Activation function
𝛴𝛴𝑤𝑤𝑖𝑖𝑥𝑥𝑖𝑖 = 𝒘𝒘𝑻𝑻𝒙𝒙
-1.01
Multilayer perceptron (MLP)
percep1
percep2
percep3
General MLP
23
𝑧𝑧𝑠𝑠𝑠𝑠𝑚𝑚𝑗𝑗 = �𝑖𝑖=0
𝑑𝑑
𝑥𝑥𝑖𝑖𝑓𝑓𝑖𝑖𝑗𝑗 + 𝑓𝑓0𝑗𝑗
𝑧𝑧𝑗𝑗 = 𝜏𝜏 𝑧𝑧𝑠𝑠𝑠𝑠𝑚𝑚𝑗𝑗
𝑎𝑎𝑠𝑠𝑠𝑠𝑚𝑚𝑘𝑘 = �𝑗𝑗=1
𝑝𝑝
𝑧𝑧𝑗𝑗𝑎𝑎𝑗𝑗𝑘𝑘 + 𝑎𝑎0𝑘𝑘
𝑎𝑎𝑘𝑘 = 𝜏𝜏(𝑎𝑎𝑠𝑠𝑠𝑠𝑚𝑚𝑘𝑘)
전방 계산
사진 출처: 패턴인식 (오일석)
■ Back propagation algorithm이란 전방계산 이후 출력 층에서 출발하여 반대방향으로 오류를 줄이는 방향으로의 가중치를 갱신하는 알고리듬이다.
Back propagation algorithm
24
� Error Calculation
Update! Update!
사진 출처: 패턴인식 (오일석)
■ Convolutional Neural Networks (CNN)
▶ 이미지를 위한 딥러닝▶ 이미지 컨볼루션 연산을 기본으로 함▶ 제한된 영역안에서만 반응하는 시각신경세포 구조를 닮음
Recent deep learning
26
자료 출처: Lecun et al., 1998, http://ufldl.stanford.edu/tutorial/supervised/FeatureExtractionUsingConvolution/
■ Convolutional Neural Networks (CNN) – Alexnet
▶ Object categorization을 위한 네트워크▶ 7 레이어, 650K 뉴런, 60M 파라메터▶ 2개의 GPU 사용 일주일간 학습▶ ImageNet challenge 2012에서 우승▶ 2등과는 인식률 10% 차이▶ 이후 발전을 거듭해 현재의 딥러닝은 물체분류를 사람보다 잘함
Recent deep learning
27
자료 출처: Krizhevsky et al., NIPS 2012
■ Recurrent Neural Network (RNN)
Recent deep learning
28
http://colah.github.io/posts/2015-08-Understanding-LSTMs/https://vsubhashini.github.io/s2vt.html
■ Memory network▶ 정보를 저장하고 이를 바탕으로 복잡한 판단을 수행
Recent deep learning
29
자료 출처: Sukhbaatar et al., 2015
■ Generative Adversarial Network
▶ Unsupervised learning▶ 학습데이터셋과 비슷한 이미지를생성하는 네트워크
▶ Generator와 Discriminator가경쟁하며 학습
Recent deep learning
30
https://sthalles.github.io/intro-to-gans/ , Redford et al., 2016
■ Python이란?▶ 파이썬은 1991년 프로그래머인 귀도 벤 로섬이 발표한 프로그래밍 언어▶ 인터프리터식, 객체지향적, 동적타이핑 대화형 언어
Python
31
■ 파이썬의 특징▶ 인간의 언어와 유사함▶ 간결하여 사용하기 쉬움▶ 비동기식 코딩▶ 자바보다 뛰어난 멀티패러다임 접근방식
■ 파이썬과 다른언어와의 차이점▶ 컴파일 언어인 C와 달리 인터프리터 언어인 파이썬은 느린 경우가 많음▶ C와 같은 형식이긴 하나 더 간단하고 명료한 편.▶ 파이썬은 여러 언어들의 특성들을 가져온 객체지향성 언어.
참고문헌: Wikipedia,점프 투 파이썬
■ Python에서의 객체(Object)▶ Python에서의 객체라는 것은 함수,모듈,리스트,튜플 등 모든 것을 객체라고 칭함.
Python
32
■ Import Package▶
▶ 파이썬에선 라이브러리를 통해 다른 프로그래밍을 할 수 있음.
▶ EX)Numpy, TensorFlow, Matplotlib
참고문헌: Wikipedia,점프 투 파이썬, 누구나 할수 있는 프로그래밍
■ Pycharm이란?▶ 파이참은 파이썬의 IDE(Integrated Development Environment).▶ IDE는 통합개발환경으로 개발자가 소프트웨어 개발과정에서 필요한 모든작업을 하나의 소프트웨어 처리할 수 있도록 환경 제공.
Run Pycharm
33
■ 파이참 시작하기
참고문헌: Wikipedia
■ For문을 이용한 list print함수와 행렬곱 을 생성
Python 예제
38
■ for문 행렬곱 함수▶ 아래 주어진 list로 행렬곱을 실행하는 함수를만들것.▶ 행렬사이즈가 맞지 않으면 메시지를 출력(if문)▶ 함수를 사용하여 실제로 행렬곱한 결과를 출력할것
참고문헌: Sjchoi101 Github
■ Numpy란?▶ Numerical Python의 줄임말로 고성능의 수치계산을 하기 위해 만들어진
Python package▶ 효율적인 데이터분석 위한 툴
NumPy
39
■ Numpy의 특징▶ 벡터, 매트릭스 고수준의 배열 과학 계산이 가능▶ 입력값 세트를 통해 계산이 반복될 때 배열로 데이터를 나타내는 것이 자연스럽고 편함.
▶ Numpy의 핵심 기능은 C로 구현(파이썬 용 C 라이브러리)▶ BLAS/LAPACK 기반▶ 빠른 수치 계산을 위한 structured Array 제공▶ 오직 같은 종류의 데이터만을 배열에 추가 할 수 있음
참고문헌: Wikipedia, http://www.numpy.org/
■ Python List vs NumPy Array▶ Python List
• 여러 가지 타입의 원소• 메모리 용량이 크고 속도가 느림• Nesting 가능• 전체 연산 불가능
NumPy
40
▶ Numpy Array• 동일 타입의 원소• 메모리 최적화 및 계산 속도 향상• 크기(dimension)이 명확하게 정의• 전체 연산 가능
■ 행렬 A,B,C,D를 만들어 식을 실행하는 코드를 만들기▶ 다음 수식을 계산하는 함수를 만들 것.
▶ 행렬은 같은 차원을 가지고 있어야 함▶ 행렬끼리 차원이 맞지 않으면 메시지를 출력▶ 곱셈은 행렬곱으로 이루어짐▶ 완성된 함수를 바탕으로 여러 입력행렬을 처리하고 그 결과를 출력하는코드를 만들 것.
Numpy 예제
45
■ Pytorch란?▶ 파이토치(Pytorch)는 딥러닝 라이브러리로 계산그래프를 정의하는데 있어서 tensorflow 보다 용의하며 최근 그 유용성으로 인해 많은 관심을 받고 있는 라이브러리 이다.
Pytorch
48
■ Computational graph?▶ 계산 그래프는 수학계산과 데이터의 흐름을 노드
(Node)와 엣지(Edge) 사용 한 방향 그래프(Directed Graph)로 표현한다.
▶ 노드는 수학적 계산, 데이터 입/출력, 그리고 데이터의 읽기/저장 등의 작업을 수행 한다
▶ 엣지는 노드들 간 데이터의 입출력 관계를 나타낸다.
▶ 엣지 동적 사이즈의 다차원 데이터 배열(=텐서)을실어 나르게 된다.
참고문헌: Wikipedia, Tensorflow internal from Cho Hyunghun
■ Pytorch 특징▶ Dynamic computational graph 생성을 통한 프로그래밍의 용의함▶ Numpy 와 python 친화적인 인터페이스▶ 데이터 처리나 기존의 모델을 편하게 사용할 수 있는 라이브러리 제공▶ Multi-GPU, Multi-CPU를 활용한 분산 컴퓨팅을 제공▶ Python 과 C++를 지원
Pytorch
49
■ Pytorch 개념▶ 오퍼레이션 (Operation)
• 텐서를 입력으로 임의의 계산을 수행함• Pytorch 는 동적으로 tensor 와 operation 을 통해 계산 그래프를 생성함
▶ 텐서 (Tensor)• 원래 의미는 2차원 이상의 배열이지만 pytorch에선 임의의 차원을 가진 배열을 의미
• 네트워크의 처리결과 값과 입력 받은 데이터 등 다양한 정보를 담을 수있음
참고문헌: Wikipedia, Tensorflow internal from Cho Hyunghun
Pytorch
50
■ Pytorch 예제 및 corresponding computation graph
참고문헌: Wikipedia, Tensorflow internal from Cho Hyunghun
■ 계산그래프를 사용하는 이유는 ?• 딥 러닝 네트워크를 학습하기 위해서는 입력과 loss 함수 사이의 네트워크에 대한 미분을 계산하는 것이 필요하다. 미분은 chain rule 을 통하여 계산됨으로 연산과 tensor 사이의 종속관계를 저장하는 것이 필요하다. 또한 계산 그래프는 함수의 역할을 함으로 변하는 입력 데이터에 대하여 같은 operation 을 적용할 수 있게 된다.
Pytorch
51
■ 다양한 실행 모드▶ 싱글 디바이스 혹은 멀티디바이스 등 다양한 디바이스에서 수행 가능
Clientprocess
Masterprocess
WorkerProcess 1
GPU
GPU
…
CPU
WorkerProcess 2
GPU
GPU
…
CPU
WorkerProcess 3
GPU
GPU
…
CPU
참고문헌: Wikipedia, Tensorflow internal from Cho Hyunghun
■ Pytorch, numpy, matplotlib Load Packages▶ 파이썬에서 필요한 Package를 import하여 사용
▶ np.random.random(x,y): x*y짜리 random np array를 생성.▶ np.zeros(x,y): x*y짜리 zeros np array 생성▶ np.random.normal: x*y짜리 normal distribution 으로 부터 추출된
np array 생성
Pytorch 예제 (linear regression)
53
Load packages
Prepare train point set
<-solution
■ Plot training data▶ plt.figure(x): x번째 figure generate▶ plt.plot(x,y,color,label): x좌표와 y좌표를 갖는 포인트들을 color로 플롯팅▶ plt.legend(): lengend의 위치 조정 관장
■ pytorch 변수선언▶ tensor: gradient 계산에 포함되는 변수 선언 입력과 모델 parameter 등이이에 해당하며 require_grad 인자를 통해 gradient 를 update 의 영향을받을지 말지를 결정하는 것이 가능하다.
Pytorch 예제 (linear regression)
54
■ 변수 와 데이터 X,Y의 선형관계를 정의한다.(30)▶ 𝑎𝑎𝑐𝑐𝑡𝑡𝑎𝑎𝑎𝑎𝑎𝑎𝑡𝑡𝑎𝑎𝑎𝑎𝑎𝑎(∗ 𝐴𝐴와 𝐵𝐵로추정된 𝑌𝑌) = 𝐴𝐴𝐴𝐴 + 𝐵𝐵
■ Mean Square Error로 cost function을 정의한다.(31)
▶1𝑚𝑚∑𝑖𝑖=1𝑚𝑚 𝑎𝑎𝑐𝑐𝑡𝑡𝑎𝑎𝑎𝑎𝑎𝑎𝑡𝑡𝑎𝑎𝑎𝑎𝑎𝑎𝑖𝑖 − 𝑌𝑌𝑖𝑖 2
■ 최적화 방법을 정의해 준다.(26)▶ torch.optim.SGD([parameters], learning_rate)
■ 모델 계산과 loss 식 계산
Pytorch 예제 (linear regression)
55
■ Forward propagation 의 결과를 이용하여 back loss 를 계산하고parameter를 update 함 (37~39)
■ Update 된 결과 W b 와 변화한 loss 값을 매 step 출력함 (41~42)■ 매 25 step 마다 W b 값을 이용하여 추정된 선을 plot 함 (44~47)
Pytorch 예제 (linear regression)
56
■ 𝒚𝒚 = 𝒙𝒙𝟐𝟐 + 𝒂𝒂𝒙𝒙 + 𝒃𝒃, a= 0.25, b = 0.75 에 noise를 추가한 train set을학습시켜, a와 b를 얻어내기
Pytorch 예제 (linear regression)
■ 라이브러리 import, train/test set 불러오기▶ Mnist set
■ Set Network parameter▶ 2층의 hidden layer를 갖는 MLP network 구축(총 4층)▶ Input과 output, hidden layer의 노드 숫자 설정
■ 결과 plot을 위한 list 정의
Multi Layer Perceptron MNIST Example
61
MLP 0
x = 28*28 image y = label
input outputmodel
■ MLP의 구조, 동작 정의▶ 𝒙𝒙 = 𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔 𝑾𝑾𝟏𝟏
𝑻𝑻𝑿𝑿 + 𝒃𝒃𝟏𝟏 : hidden layer 1
▶ 𝒙𝒙 = 𝒔𝒔𝒅𝒅𝒔𝒔𝒅𝒅𝒔𝒔𝒅𝒅𝒕𝒕 𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔𝒔 𝑾𝑾𝟐𝟐𝑻𝑻𝒙𝒙𝟏𝟏 + 𝒃𝒃𝟐𝟐 : hidden layer 2 + dropout
* dropout은 과적합을 막기 위해 weight을 일정확률로 끊기 위한 테크닉▶ return 𝒍𝒍𝒔𝒔𝒔𝒔_𝒔𝒔𝒔𝒔𝒔𝒔𝒕𝒕𝒔𝒔𝒂𝒂𝒙𝒙(𝒔𝒔𝒅𝒅𝒕𝒕𝒅𝒅𝒅𝒅𝒕𝒕 𝒙𝒙 )
Multi Layer Perceptron MNIST Example
62
사용할 layer, activation function 등 정의
Layer와 activation function 등을 활용해 동작정의
■ model 생성, criterion과 optimizer 정의▶ gpu가 사용 가능할 경우 gpu에서 계산▶ 앞서 정의한 class대로 model생성▶ criterion은 NLL(negative log likelihood)Loss로, 모델의 output으로 나온결과와 실제 label을 비교
▶ Optimizer은 adam optimizer를 사용
■ training parameters▶ training_epochs: 학습할 횟수(epoch: 세대)▶ batch_size: model이 한번에 계산할 image의 개수
(Dataloader에서 batch size가 필요하기 때문에 순서상 앞쪽에 정의함)
Multi Layer Perceptron MNIST Example
63
■ Train▶ train을 위한 model설정▶ mnist_dataloader가 제공하는 각 batch에 대해 loss를 계산하고 back-
propagation 수행, loss 누적▶ 누적된 loss를 평균을 취하고 결과plot을 위해 epoch과 평균loss를 기록▶ 해당 epoch에 대한 정보를 출력
Multi Layer Perceptron MNIST Example
64
■ Test▶ test을 위한 model설정▶ testloader가 제공하는 각 batch에 대해 loss를 계산하여 누적, 마지막에평균을 취함
▶ test data에 대해 model이 내놓은 결과값(확률)이 가장 높은 것과 실제label(target)이 나타내는 것이 같은 개수를 셈
▶ test average loss, accuracy 출력
Multi Layer Perceptron MNIST Example
65
■ Train & Test, Plot Graph▶ 설정한 epoch수 만큼을 돌며 train과 test를 반복▶ 학습이 모두 끝나면 epoch의 증가에 따른 loss의 감소를 나타내는 그래프를 출력
Multi Layer Perceptron MNIST Example
66
■ 파라미터(running rate, training_epochs 등)와, layer의 수나 node의수 등 모델을 변화시켜, 성능을 늘려봅시다!
■ .95 이상의 성능을 내는 모델과 파라미터 세팅을 구현하기
Multi Layer Perceptron MNIST Example
68
■ 오일석, 패턴인식■ 박응용, 점프투파이썬■ www.numpy.org■ www.scipy.org■ https://github.com/sjchoi86/Tensorflow-101■ Tensorflow internal from Cho Hyunghun
참고문헌
69
■ Books :• 패턴인식, 오일석• Deep learning book, Ian Goodfellow
■ Library documentation :• Pytorch : https://pytorch.org/docs/stable/tensors.html• Numpy : http://www.numpy.org/• Scipy : https://www.scipy.org/• Python : https://docs.python.org/ko/3/
■ Tutorial documentation :• Distilled pytorch tutorial :
https://towardsdatascience.com/pytorch-tutorial-distilled-95ce8781a89c
참고문헌
70
74
C:\ProgramData\anaconda3\tensorflow\env\python.exe
C:\Users\kyujin\AppData\Local\conda\tensorflow\env\python.exe