본문 바로가기
Tensorflow

[Tensorfolw] 텐서플로우 분포와 뉴런에 대해

by LasBe 2021. 4. 8.
반응형

1. 난수 생성

 

 

1.1 균일분포

 

rand = tf.random.uniform([1], 0, 1)

 

이 uniform 함수는 균일분포의 난수를 얻을 수 있다.

 

균일분포란 최솟값과 최댓값 사이의 모든 수가 나올 확률이 동일한 분포에서 수를 뽑는다는 뜻이다.

 

처음에 나오는 [1]은 행렬을 구성하는 차원의 수를 나타내는 값이다.

 

두번째 0은 최솟값 세번째 1은 최댓값을 나타낸다.

 

 

 

1.2 정규분포

 

rand = tf.random.normal([4], 0, 1)

 

normal 함수는 정규분포의 난수를 얻을 수 있다.

 

정규분포란 가운데가 높고 양극단으로 갈수록 낮아져서 종 모양을 그리는 분포이다.

 

 

그런데 여기서는 1 이상의 값도 나올 수 있고 음수도 나오고 있다.

 

정규분포의 두번 째와 세 번째 인수는 앞에서의 균일분포와 다르기 때문이다.

 

여기서 두 번째의 0은 정규 분포의 평균, 세 번째 1은 정규 분포의 표준편차를 의미한다.

 

 

2. 뉴런

 

 

2.1 뉴런

 

뉴런은 입력, 가중치, 활성화함수, 출력으로 구성된다.

 

활성화함수는 뉴런의 출력값을 정하는 함수이다.

 

가장 간단한 형태의 뉴런은 입력에 가중치를 곱한 뒤 활성화 함수를 취하면 출력을 얻을 수 있다.

 

뉴런에서 학습할 때 변하는 것은 가중치이다.

 

가중치는 처음엔 초기화를 통해 랜덤한 값을 넣고, 학습 과정에서 점차 일정한 값으로 수렴한다.

 

학습이 잘 된다는 것은 좋은 가중치를 얻어서 원하는 출력에 점점 가까운 값을 얻는 것이라고 할 수 있다.

 

 

2.2 활성화함수

 

 

활성화함수로는 시그모이드, ReLU등을 주로 사용하게 된다.

 

딥러닝에서 선형함수는 y=x라는 식으로 정의할 수 있는 입력과 출력이 동일한 함수를 의미한다.

 

이 함수를 정류해서 음수 값을 0으로 만든 것이 ReLU이다.

 

 

2.3

 

입력이 1일 때 기대출력이 0이 되는 뉴런을 만들어보겠다.

 

우선 math 함수는 시그모이드 함수의 e제곱값을 계산하기 위해 불러온다.

 

입력인 x에는 1을 넣고 가중치는 w로 정규 분포의 랜덤한 값을 넣는다.

 

실제출력인 output는 sigmoid()함수에 입력과 가중치을 곱한 값을 넣어서 계산한다.

 

여기서 실제출력으로 나온 0.4848과 기대출력인 0의 차이인 0-0.4848을 에러라고 한다.

 

뉴런의 학습은 이 에러가 0에 가까워지게 해서 출력으로 기댓값에 가까운 값을 얻는 것이다.

 

여기서 뉴런이란 결국 w 값이다.

 

이제 이 w를 변화시켜야 하는데 이 때 w에 합습률과 에러를 곱한 값을 더해주는 경사 하강법이라는 방법을 사용한다.

 

학습률은 w를 업데이트하는 정도로, 큰 값으로 설정하면 학습이 빨리 되지만 과도한 학습으로 적정한 수치를 벗어날 우려가 있고, 너무 작은 값은 학습 속도가 너무 느려질 수 있다.

 

여기서는 학습률을 0.1로 설정하고 1000회 반복을 시켰다.

 

그러자 에러값은 낮아지고 아웃풋은 0에 가까워지는 것을 볼 수 있다.

 

 

2.4 편향

 

이번에는 입력이 0 기대 값을 1로 설정해서 그대로 돌린다면 어떻게 될까.

 

w = w + x * 0.1 * error 에서 x 값으로 인해 w = w가 되어버려 업데이트가 되지 않는다.

 

이럴 때는 편향을 사용해준다.

 

편향은 입력으로는 늘 한쪽으로 치우친 고정된 값(ex: 1)을 받아서 입력으로 0을 받았을 때 뉴런이 아무것도 배우지 못하는 상황을 방지한다.

 

 편향인 b가 추가됐고, w처럼 정규분포로 초기화해준다.

 

실제 출력인 output 값을 계산할 때 sigmod(x * w + 1 * b)라는 수식을 계산해서 각 입력에 가중치와 편향을 곱해서 더한 뒤 시그모이드 함수를 취한다.

 

프로그램을 실행한 결과 w값은 그대로인데 반해 b 값은 계속 변하면서 output은 기대출력인 1에 가까워진다.

반응형

댓글


오픈 채팅