달력

06

« 2018/06 »

  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

[정리] 모두를 위한 딥러닝 10 - ReLU & 초기값 정하기   by 김성훈 


강의 웹사이트 : http://hunkim.github.io/ml/

Lec = 강의 / Lab = 실습


시그모이드 결과값은 0<f(x)<1 이기 때문에 이를 체인룰에 따라 계속 곱하다보면 (레이어가 많으면) 

0.01 * 0.03 * 0.2 와 같은 형태가 되기 때문에 결국 한없이 0 에 가까워지게 됩니다. 

즉, 입력값 X 가 결과값 f(x), Y 에 미치는 영향이 거의 없게 됩니다.  

따라서, 학습을 깊게 여러번 하면 할수록 에러가 커지는 현상이 일어납니다. 이건 오버피팅 Over Fitting 과 다릅니다.


이를 극복하기 위한 함수가 렐루 ReLU 입니다. (위 그림에서 검정색이 시그모이드 sigmoid, 자주색이 렐루 ReLU 함수)

렐루는 0 이하는 0 으로, 그 이상값은 자기 자신의 값을 갖는 함수입니다.


이 두가지 함수를 비교하기 위해 텐서보드 tensorboard 를 이용해보겠습니다.

텐서보드로 분석할 수 있도록 로그를 남긴 다음, 텐서보드를 띄워서 웹브라우저로 확인하면 됩니다.

생각보다 메모리나 CPU 를 많이 사용하는, 좀 무거운 라이브러리입니다.

(텐서보드 이미지 추가)


정확도 비교.

1번 방법 = 시그모이드를 사용하여 레이어 3개 ~ 10개 사용하기.

# weights & bias for nn layers
with tf.name_scope("L1") as scope:
W1 = tf.Variable(tf.random_normal([784, 256]))
b1 = tf.Variable(tf.random_normal([256]))
L1 = tf.sigmoid(tf.matmul(X, W1) + b1)
w1_hist = tf.summary.histogram("weights1", W1)
b1_hist = tf.summary.histogram("biases1", b1)
layer1_hist = tf.summary.histogram("L1", L1)

with tf.name_scope("L2") as scope:
W2 = tf.Variable(tf.random_normal([256, 256]))
b2 = tf.Variable(tf.random_normal([256]))
L2 = tf.sigmoid(tf.matmul(L1, W2) + b2)
w2_hist = tf.summary.histogram("weights2", W2)
b2_hist = tf.summary.histogram("biases2", b2)
layer2_hist = tf.summary.histogram("L2", L2)

이런 형태로 레이어를 3개, 10개 만듭니다.


2번 방법 = 렐루 relu 를 사용하여 레이어 3개 ~ 10개 사용하기.

# weights & bias for nn layers
with tf.name_scope("L1") as scope:
W1 = tf.Variable(tf.random_normal([784, 256]))
b1 = tf.Variable(tf.random_normal([256]))
L1 = tf.nn.relu(tf.matmul(X, W1) + b1)
w1_hist = tf.summary.histogram("weights1", W1)
b1_hist = tf.summary.histogram("biases1", b1)
layer1_hist = tf.summary.histogram("L1", L1)

with tf.name_scope("L2") as scope:
W2 = tf.Variable(tf.random_normal([256, 256]))
b2 = tf.Variable(tf.random_normal([256]))
L2 = tf.nn.relu(tf.matmul(L1, W2) + b2)
w2_hist = tf.summary.histogram("weights2", W2)
b2_hist = tf.summary.histogram("biases2", b2)
layer2_hist = tf.summary.histogram("L2", L2)

이런 형태로 레이어를 3개, 10개 만듭니다.

두 소스에서 sigmoid / relu 이 부분만 다릅니다.


4개의 소스를 비교해보면 

 

 Sigmoid 3 Layer

 ReLU 3 Layer

 Sigmoid 10 Layer

 ReLU 10 Layer

 정확도

 94.21 %

 95.87 %

 94.31 %

 93.00 %


엠니스트 MNIST 는 위 4가지 중에서 렐루 3 레이어로 만들때 가장 좋은 결과가 나왔습니다.

즉, 너무 많은 레이어는 결과가 더 나빠지기도 합니다.


그리고, 초기값 잘 설정하는게 중요합니다.

(정리중)

RBM : Restricted Boatman (Boltzman) Machine

자비어 : xavier

MSRA



Posted by 멋지다마라송

[정리] 모두를 위한 딥러닝 09 - XOR 풀기  by 김성훈 


강의 웹사이트 : http://hunkim.github.io/ml/

Lec = 강의 / Lab = 실습


XOR 게이트는 입력값 두개를 받아서, 두개가 다르면 (1,0) 또는 (0,1) 이런 형태이면 1 참값을 리턴하는 함수입니다.


XOR 게이트는 한개의 선형 리니어 함수로는 풀 수 없고, 여러개를 이용하면 풀 수 있습니다.


이렇게 3개로 연결해서 만들면 됩니다.


여기에서는 w1, b1 값이 주어졌는데, 이 값 말고도 다른 값도 찾을 수 있습니다.

이 슬라이드에서 5, -8 / -7, 3 / -11, 6 이런 값들이 이미 주어졌지만, 이 값들은 학습을 통해 찾아야 합니다.


이를 위해 백 프로파게이션 기법을 이용합니다.

출력으로 나온 에러 loss 를 다시 뒤에서부터 계산하는 방법입니다. (계산할때에는 편미분을 사용합니다.)


아래 슬라이드에서 보면 빨간색 가장 위에 글자. 편미분 : w 가 f 에 미치는 영향. 이걸 먼저 보겠습니다. 

최종적으로 입력값이 가장 마지막에 있는 f 에 미치는 영향.이 필요한건데, 아래와 같이 구할 수 있습니다.

w 가 f 에 미치는 영향 = g 가 f 에 미치는 영향 * x 가 f 에 미치는 영향 = 편미분 f/g * 편미분 g/x  = 1 * w


이렇게 편미분을 뒤에서부터 계산하면 아주 쉽게 이 값들을 구할 수 있습니다.

편미분들의 곱으로 전체를 나타내는 방법이 바로 백 프로파게이션 이며, 이를 체인룰 이라고도 합니다.

특히 가장 마지막에 있는 함수 f 를 Activation Function 이라고 부릅니다.

자, 그런데 이 함수가 시그모이드 형태를 띄고 있다면 문제가 있습니다.

1 또는 0 에 수렴하기 때문에 무조건 1 보다 작게 됩니다.

그러니 f 결과값, 즉 액티베이션 함수의 결과값을 곱하면 (이런 로직이 생긴다) 0 보다 한없이 작아지게 됩니다.

다음번에 이걸 풀어보겠습니다.


참고로, 이렇게 그려지는 그래프를 텐서보드로 확인하는 방법입니다. (소스 09-4)

D:\marasong\Workspace\DeepLearningZeroToAll-master>tensorboard --logdir=./logs/xor_logs_r0_01

실행한 다음 웹 브라우저로 확인해 볼 수 있습니다.

Posted by 멋지다마라송

깃헙 Github 을 이용한 무료/깔끔 홈페이지 만들기


https://steemit.com/github/@marasong/github


깔끔하고 좋습니다.

먼저 깃헙 https://github.com 가입을 해야겠죠?

create.github.homepage.001.png
깃헙 사이트에서 로그인 한 다음, 상단 프로필 왼쪽에 플러스 + 클릭, New Repository 선택.

create.github.homepage.002.png
Repository Name 에 사용할 도메인을 스크린샷처럼 marasong.github.com 형태로 넣고, 나머지는 그대로 둡니다.

스크린샷에는 marasong2.github.com 이라고 되어있지만, 본인이 사용할 도메인을 정해서 넣으면 됩니다.

 

create.github.homepage.003.png
그러면 기본적인 페이지가 만들어집니다.

홈페이지를 만들때 소스관리도 Git 을 이용할거라서 깃소스 관리툴 소스트리를 설치합니다.

소스트리 홈페이지 https://www.sourcetreeapp.com/ 에서 다운로드, 설치합니다.

create.github.homepage.004.png
소스트리 실행, 깃 소스를 저장할 폴더를 미리 만들고 방금 만든 깃 저장소를 클론 Clone.
다운로드 : 깃 서버 -> 로컬 피씨 = 풀 Pull
업로드 : 로컬 피씨 -> 깃 서버 = 푸시 Push 한 다음 커밋 Commit

create.github.homepage.005.png
그러면 로컬 폴더에 파일이 생깁니다. 오 ~

이제 테마를 적용해 봅시다.
create.github.homepage.006.png
깃 저장소에서 Settings 클릭.

create.github.homepage.007.png
아래로 가면 Change theme 버튼이 있습니다. 클릭.

create.github.homepage.008.png

위와 같이 이동해서 원하는 테마를 선택하세요. 저는 미드나이트 Midnight -> Select theme 를 선택했습니다.


테마가 적용되면 깃 저장소 파일이 바뀝니다.

create.github.homepage.009.png

이제 깃 서버에서 갱신된 파일을 로컬에 받아보죠. 그래야 최신 소스를 유지할 수 있습니다.

SourceTree 실행 -> 브랜치 master -> 변경된 파일 확인 -> 풀 Pull 클릭.

create.github.homepage.010.png

이제 README.md 파일을 열어서 스크린샷 참고해서 수정해봅시다.

create.github.homepage.012.png
커밋 : 변경된 내용을 적고 아래 커밋버튼 클릭.

create.github.homepage.011.png
로컬에서 수정한 파일을 스테이지에 올리고 푸시 Push 클릭.

이제 깃 홈페이지 메인에 접속해서 수정된 페이지를 봅시다 ~

https://marasong.github.com/


테마도 적용할 수 있습니다.
http://themes.jekyllrc.org/pithy/

Posted by 멋지다마라송


티스토리 툴바