데이터 취업 스쿨 스터디 노트 -(79) 최적화 - 자동미분, linear regression 실습, 당뇨병 데이터, perceptron

테리·2024년 9월 24일
0

자동미분

텐서플로에서 자동미분은 tf.GradientTape로 한다.

스칼라를 스칼라로 미분

with문 뒤의 코드가 다 실행된 상태로 내부 코드(y=x^2)가 실행된다.
GradientTape은 Variable에 대한 미분값만 추정한다. 상수(constant)가 아니다.

스칼라를 벡터로 미분

자동미분 컨트롤

  • tf.Variable만 기록 합니다!
  • A variable + tensor 는 tensor를 반환
  • trainable 조건으로 미분 기록을 제어

Linear Regression 구현해보기

  • w_true, B_true는 참값으로 나중에 우리가 학습한 값과 비교하기 위해 사용됨.
  • x는 500개의 랜덤한 입력 데이터
  • 실제 세상에서는 noise가 있으므로 랜덤한 잡음을 넣어줌.
  • y는 우리가 예측하려는 값.
  • 학습할 가중치와 바이어스를 초기화함.
  • tf.Variable은 텐서플로우에서 학습 중에 값이 변경되는 변수
  • w = 5.와 b = 0.은 임의로 설정된 초기 값
  • with tf.GradientTape() as tape:: 이 부분은 텐서플로우가 학습을 위해 손실 함수의 미분(gradient)을 자동으로 계산해주는 기능.
  • y_hat = X * w + b: 우리가 현재 예측하는 값. X에 가중치 w를 곱하고, 바이어스 b를 더한 결과.
  • loss = tf.reduce_mean(tf.square(y - y_hat)): 손실(loss) 값은 예측한 값(y_hat)과 실제 값(y)의 차이의 제곱의 평균을 구한 것입니다. 이 값이 작아질수록 모델의 예측이 좋아짐.
  • (500개의 y와 y_hat 간의 차이(오차)를 제곱하고, 이 오차를 평균 내어 하나의 평균 손실 값(loss)을 계산함.)
  • dw, db = tape.gradient(loss, [w, b]): 손실에 대한 가중치와 바이어스의 미분 값(기울기)을 계산함.
  • w.assign_sub(lr * dw)와 b.assign_sub(lr * db): 학습률 lr을 곱한 기울기를 현재 가중치와 바이어스에서 빼주면서 값을 업데이트함. 이 과정을 통해 점차 손실을 줄여나가게 된다.

당뇨병 데이터

이번에는, SGD 방식으로 구현

w_int의 type을 바꾸지 않고 실행하니 타입이 맞지 않다고 예측이 안되서 다시 이 코드로 돌아와 X의 타입을 확인후 타입을 맞춰줌.

퍼셉트론

0개의 댓글