inflearn logo
강의

講義

知識共有

初めてのディープラーニングとPyTorch(パイトーチ)ブートキャンプ(簡単に!基礎からChatGPT核心トランスフォーマーまで)[データ分析/科学 Part3]

ディープラーニング実装にOptimizerを追加する

질문 드립니다 - 딥러닝 구현에 optimizer 추가하기 부분 -> detach 메서드

395

daniel

投稿した質問数 58

1

threshold = 0.1
learning_rate = 0.1
iteration_num = 0

# loss를 이용해서 gradient descent update
# loss 가 threshold 밑으로 내려가면 loop 중지 
while loss > threshold:
    iteration_num += 1
    
    # 갱신된 미분값을 이용해서 W와 b 업데이트
    W = W - learning_rate * W.grad
    b = b - learning_rate * b.grad    
    print (iteration_num, loss, z, y)

    # detach_() : 텐서를 기존 방향성 비순환 그래프(DAG; Directed Acyclic Graph)로부터 끊음
    # .requires_grad_(True) : 연결된 Tensor 로부터의 계산된 자동미분 값을, 다시 현 텐서부터 시작하도록 만듬
    # 기존 그래프에서 끊어낸 후 기억한 자동 미분값을 이용해서 현 텐서부터 갱신할 수 있게 함 
    # 미분을 계산한 이후 DAG로 부터 왜 detach를 한 후 requires_grad를 다시 해야하는지..? 정확히 이해가 잘 안감
    W.detach_().requires_grad_(True)
    b.detach_().requires_grad_(True)
    
    # 갱신된 미분값을 이용해서 예측값과 loss 값 갱신 => 갱신된 loss를 이용해서 미분값 다시 계산 
    z = torch.matmul(x, W) + b
    loss = F.mse_loss(z, y)
    loss.backward()

print (iteration_num + 1, loss, z, y)

detach 메소드가 깊은 복사 시 신경망으로부터 텐서를 분리하는 것은 이해가 갑니다..!

    W.detach_().requires_grad_(True)

    b.detach_().requires_grad_(True)

미분을 계산한 이후 DAG로 부터 왜 detach를 한 후 requires_grad를 다시 해야하는지..?

처음에 require_grad가 되어 있으니

매번 미분 값 계산할 때마다 grad가 갱신되기 때문에

굳이 detach로 분리를 해야하는지

해당 부분이 이해가 잘 안갑니다.

 

 


 

-> 강사님의 다음 강의를 듣고 이해했는데

제가 이해한 것이 맞는지 확인받고 싶습니다

 

 

 

머신러닝 배워볼래요? 딥러닝 인공신경망 pytorch vision-transformer

回答 2

1

funcoding

안녕하세요. 답변도우미입니다. 네 맞습니다.

detach() 의 역할은 기존 그래프에서 끊어내는 역할을 하는 것입니다. requires_grad 의 역할은 이제부터 모든 연산을 추적하기 시작한다 라는 것을 선언하는 역할인데요. (디폴트값이 False 인데, 이를 True 로 만들면, 그 때부터의 연산을 추적합니다.) 그래서, detach_().requires_grad_(True) 이면, 기존 그래프에서 끊어낸 후, 다시 시작하는 연산부터 그 연산을 추적합니다.

지금 보여주신 부분은 W, b 값 계산시에는 그 때까지의 연산을 추적하여 계산한 미분값을 사용하여 W, b 값을 계산하고, 이후에는 그때까지의 연산 그래프에서 끊어낸 후, 다시 다음 연산부터 추적하기 위해, detach_().requires_grad_(True) 을 수행한 것입니다. 그러지 않으면, matmul, mse_loss, loss.backward() 까지 연산이 다 추적되면서, 기존 미분값에 각 연산시의 미분값이 누적되어, 미분값이 잘못 계산되거든요. 이 부분은 이후 다시한번 미분값 계산에 어떻게 기존 연산이 영향을 주는지 설명을 드리고 있어서, 이후에 이 부분을 또 보실 수 있으실꺼예요.

감사합니다.

0

daniel

너무 친절한 설명 감사드립니다 강사님

import torch가 안되는 경우는 어떻게 하나요?

0

16

1

강의 필기는 어떻게 하나요?

0

85

1

섹션 5퀴즈 4번 문제 보기 오류로 보임

0

63

1

섹션17 81번이랑 82번 강의가 중복되는 것 같아서 질문드립니다.

0

88

2

강의교안이 안 옵니다

0

80

1

17-2강 Transfer learning 실습 관련 질문

0

134

2

13섹션 강의자료가 없네요^^

0

92

1

강의자료가 없네요.

0

106

2

LSTM 모델 학습 관련한 질문입니다.

0

127

1

MSE LOSS 관련

0

132

1

test시 minibatch 사용?

0

133

1

Average Test loss 계산식 문의

0

101

1

파이토치 설치

0

247

1

[Pytorch 기울기의 누적 곱? 누적 합?]

0

135

1

3d 텐서에서의 축 구분 질문

0

119

1

항상 tensor([0., 0., 0.]) 형식으로만 나오는 이유

0

111

1

강의자료 PDF 다운로드에 관하여

0

132

1

[실무에서 판다스 copy()메서드의 깊은복사 얕은복사 조정 소요가 생길까?]

0

116

1

섹션 다양한 Optimizer 정리하기 중 딥러닝으로 Regression 문제 적용해보기 (House Price Kaggle 문제) 강의에서 오류가 발생합니다.

0

148

1

마지막에 confusion matrix 작성할때

0

157

1

아나콘다를 사용하지 않고 파이토치 사용하는 방법

0

853

1

test data 의 loss 계산식 문의

0

288

1

차원 출력 관련 문의

0

245

1

섹션 7-4 당뇨병

0

388

3