Introduction to Deep Learning and Neural...

75
Introduction to Deep Learning and Neural Networks Vision Modeling Lab. Division of Electrical Engineering Hanyang University, ERICA Campus

Transcript of Introduction to Deep Learning and Neural...

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!

사진 출처: 패턴인식 (오일석)

History of Neural Networks

25

자료 출처: Junmo Kim, Deep Learning for Computer Vision

■ 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

■ Print function usages

■ For + If/else

Python 예제

34

참고문헌: Sjchoi101 Github

■ Make a function

■ String operations

Python 예제

35

■ List

■ Dictionary

Python 예제

36

■ Class

Python 예제

37

■ 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)이 명확하게 정의• 전체 연산 가능

■ Load Packages, Rank n array

■ Random(uniform,Gaussian)

Numpy 예제

41

참고문헌: Sjchoi101 Github

■ Generation ones, zeros, Identity

■ Product and addition and Matrix product

Numpy 예제

42

■ Get Row

Numpy 예제

43

■ Data Types & Array math

Numpy 예제

44

■ 행렬 A,B,C,D를 만들어 식을 실행하는 코드를 만들기▶ 다음 수식을 계산하는 함수를 만들 것.

▶ 행렬은 같은 차원을 가지고 있어야 함▶ 행렬끼리 차원이 맞지 않으면 메시지를 출력▶ 곱셈은 행렬곱으로 이루어짐▶ 완성된 함수를 바탕으로 여러 입력행렬을 처리하고 그 결과를 출력하는코드를 만들 것.

Numpy 예제

45

■ Matplotlib▶ 파이썬 라이브러리 중 플롯을 그릴 때 주로 쓰이는 2D,3D 플로팅 패키지이다

matplotlib

46

■ Matplotlib

■ 식과 그림을 보고 line2를 만들어내자

matplotlib

47

■ 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 예제 (linear regression)

52

■ 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

■ 결과물

Pytorch 예제 (linear regression)

57

Solution was (a = 0.25, b = 0.76)

■ 𝒚𝒚 = 𝒙𝒙𝟐𝟐 + 𝒂𝒂𝒙𝒙 + 𝒃𝒃, a= 0.25, b = 0.75 에 noise를 추가한 train set을학습시켜, a와 b를 얻어내기

Pytorch 예제 (linear regression)

Multi Layer Perceptron MNIST Example■전체 코드

Multi Layer Perceptron MNIST Example■전체 코드

■ 라이브러리 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

■ Result

Multi Layer Perceptron MNIST Example

67

■ 파라미터(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

71

72

73

74

C:\ProgramData\anaconda3\tensorflow\env\python.exe

C:\Users\kyujin\AppData\Local\conda\tensorflow\env\python.exe