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

Upload: others

Post on 20-May-2020

7 views

Category:

Documents


0 download

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!

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

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