[파이토치로 시작하는 딥러닝 기초]03_Deeper Look at Gradient Descent

2020. 12. 21. 17:01·AI Study/DL_Basic
반응형

Deeper Look at Gradient Descent

  • Hypothesis function
  • Cost function 이해
  • Gradient descent 이론
  • Gradient descent 구현
  • Gradient descent 구현(nn.optiom)

Hypothesis (Linear Regression)

Hypothesis function은 인공신경망의 구조를 나타내는데 주어진 input에 대해 어떤 output을 나타내는지 𝐻(𝑥)H(x)로 표현한다.

 

$${H(x) = Wx + b}$$

  • ${W}$ : Weight
  • ${b}$ : bias

 

What is the best model?

Cost function

  • 모델 예측값이 실제 데이터와 얼마나 다른지 나타내는 값
  • 잘 학습된 모델일수록 낮은 cost를 가진다.

  • W = 1일 떄 cost = 0
  • 1에서 멀어질수록 cost는 커진다.

미분

  • ${cost(W) = \frac{1}{m}\sum_{i=1}^{m}(Wx^{(i)} - y^{(i)})^2}$
  • ${\nabla{W} = \frac{\partial{cost}}{\partial{W}} = \frac{2}{m}\sum_{i=1}^{m}(Wx^{(i)} - y^{(i)})x^{(i)}}$
  • ${W : = W - \alpha \nabla{W}}$

실습코드

## full code

## data
x_train = torch.FloatTensor([[1], [2], [3]])
y_train = torch.FloatTensor([[1], [2], [3]])

## model 초기화
W = torch.zeros(1)
# learning rate
lr = 0.1

## epoch : 데이터로 학습한 횟수
## 학습하면서 점점 1에 수렴하는 w와 줄어드는 cost를 알 수 있음
nb_epochs = 10
for epoch in range(nb_epochs + 1):
    # b = torch.zeros(1, requires_grad = True)
    hypothesis = x_train*W
    
    # cost gradient 계산
    cost = torch.mean((hypothesis - y_train)**2)
    gradient = torch.sum((W*x_train - y_train) * x_train)
    
    print('Epoch {:4d}/{} W: {:3f} Cost: {:.6f}'.format(
        epoch, nb_epochs, W.item(), cost.item()
    ))
    
    W -= lr*gradient
    
    
>>>
Epoch    0/10 W: 0.000000 Cost: 4.666667
Epoch    1/10 W: 1.400000 Cost: 0.746666
Epoch    2/10 W: 0.840000 Cost: 0.119467
Epoch    3/10 W: 1.064000 Cost: 0.019115
Epoch    4/10 W: 0.974400 Cost: 0.003058
Epoch    5/10 W: 1.010240 Cost: 0.000489
Epoch    6/10 W: 0.995904 Cost: 0.000078
Epoch    7/10 W: 1.001638 Cost: 0.000013
Epoch    8/10 W: 0.999345 Cost: 0.000002
Epoch    9/10 W: 1.000262 Cost: 0.000000
Epoch   10/10 W: 0.999895 Cost: 0.000000

Gradient Descent with torch.optim

  • torch.optim으로도 gradient descent를 할 수 있다.
    • 시작할 때 optimizer를 정의
    • optimizer.zero_grad()로 gradient를 0으로 초기화
    • cost.backward()로 gradient 계산
    • optimizer.step()으로 gradient descent
# optimizer 설정
optimizer = torch.optim.SGD([W], lr = 0.15)

# cost로 H(x) 개선
optimizer.zero_grad()
cost.backward()
optimizer.step()

실습

## full code

## data
x_train = torch.FloatTensor([[1], [2], [3]])
y_train = torch.FloatTensor([[1], [2], [3]])

## model 초기화
W = torch.zeros(1, requires_grad = True)
# optimizer 설정
optimizer = torch.optim.SGD([W], lr = 0.15)

## epoch : 데이터로 학습한 횟수
## 학습하면서 점점 1에 수렴하는 w와 줄어드는 cost를 알 수 있음
nb_epochs = 10
for epoch in range(nb_epochs + 1):
    # b = torch.zeros(1, requires_grad = True)
    hypothesis = x_train*W
    
    # cost gradient 계산
    cost = torch.mean((hypothesis - y_train)**2)
    
    print('Epoch {:4d}/{} W: {:3f} Cost: {:.6f}'.format(
        epoch, nb_epochs, W.item(), cost.item()
    ))

    # cost로 H(x) 개선
    optimizer.zero_grad() # gradient 0으로 초기화
    cost.backward()    ## gradient 계산
    optimizer.step()   ## gradient descent
    
>>>
Epoch    0/10 W: 0.000000 Cost: 4.666667
Epoch    1/10 W: 1.400000 Cost: 0.746667
Epoch    2/10 W: 0.840000 Cost: 0.119467
Epoch    3/10 W: 1.064000 Cost: 0.019115
Epoch    4/10 W: 0.974400 Cost: 0.003058
Epoch    5/10 W: 1.010240 Cost: 0.000489
Epoch    6/10 W: 0.995904 Cost: 0.000078
Epoch    7/10 W: 1.001638 Cost: 0.000013
Epoch    8/10 W: 0.999345 Cost: 0.000002
Epoch    9/10 W: 1.000262 Cost: 0.000000
Epoch   10/10 W: 0.999895 Cost: 0.000000

 

출처 : www.boostcourse.org/ai214/lecture/42285

 

파이토치로 시작하는 딥러닝 기초

부스트코스 무료 강의

www.boostcourse.org

 

반응형

'AI Study > DL_Basic' 카테고리의 다른 글

[파이토치로 시작하는 딥러닝 기초]05_ Logistic Regression  (0) 2020.12.22
[파이토치로 시작하는 딥러닝 기초]04.02_Loading Data  (0) 2020.12.21
[파이토치로 시작하는 딥러닝 기초]04.01_Multivariable_Linear_regression  (0) 2020.12.21
[파이토치로 시작하는 딥러닝 기초]02_Linear Regression  (0) 2020.12.21
[파이토치로 시작하는 딥러닝 기초]01_Tensor Manipulation(텐서 조작)  (0) 2020.11.26
'AI Study/DL_Basic' 카테고리의 다른 글
  • [파이토치로 시작하는 딥러닝 기초]04.02_Loading Data
  • [파이토치로 시작하는 딥러닝 기초]04.01_Multivariable_Linear_regression
  • [파이토치로 시작하는 딥러닝 기초]02_Linear Regression
  • [파이토치로 시작하는 딥러닝 기초]01_Tensor Manipulation(텐서 조작)
자동화먹
자동화먹
많은 사람들에게 도움이 되는 생산적인 기록하기
    반응형
  • 자동화먹
    자동화먹의 생산적인 기록
    자동화먹
  • 전체
    오늘
    어제
    • 분류 전체보기 (144)
      • 생산성 & 자동화 툴 (30)
        • Notion (24)
        • Obsidian (0)
        • Make.com (1)
        • tips (5)
      • Programming (37)
        • Python (18)
        • Oracle (6)
        • Git (13)
      • AI Study (65)
        • DL_Basic (14)
        • ML_Basic (14)
        • NLP (21)
        • Marketing&Recommend (4)
        • chatGPT (0)
        • etc (12)
      • 주인장의 생각서랍 (10)
        • 생각정리 (4)
        • 독서기록 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    딥러닝
    Github
    기초
    Python
    머신러닝
    데이터베이스
    노션첫걸음
    자연어처리
    gcp
    GPT
    nlp
    데이터분석
    ML
    dl
    pytorch
    notion
    Transformer
    Google Cloud Platform
    git
    빅데이터
    파이토치
    cnn
    LSTM
    python기초
    빅데이터분석
    파이토치로 시작하는 딥러닝 기초
    Jupyter notebook
    seq2seq
    노션
    git commit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
자동화먹
[파이토치로 시작하는 딥러닝 기초]03_Deeper Look at Gradient Descent
상단으로

티스토리툴바