<jupyter_start><jupyter_text>4. 역전파 4.2 그레디언트 텐서<jupyter_code># 라이브러리 불러오기
import torch
# requires_grad=True는 해당 텐서를 기준으로 모든 연산들을 추적할 수 있게 하는 옵션이다.
# 즉, x에 대해서 연쇄 법칙을 이용한 미분이 가능하다는 것이다.
x = torch.ones(2,2, requires_grad=True)
print(x)
# y는 x에 대한 식, z는 y에 대한 식, res는 z에 대한 식이다. 따라서 이는 합성함수의 개념으로써 x에 대해서 표현 및 미분이 가능하다.
y = x+1
z = 2*y**2
r = z.mean()
print("y: ", y)
print("z: ", z)
print("Result: ", r)
# grad_fn=..은 추적이 잘 되고 있다는 의미다.
r.backward() # res를 기준으로 역전파를 진행하겠다는 의미다.

# 역으로 식을 써내려 가보자.
# res = (z_1 + z_2 + z_3 +z_4)/4
# z_i = 2 y_i **2
# z_i = 2(x_i+1)**2
# d(res)/dx_i = x_i + 1

print(x)
print(x.grad) 
# x.grad는 backward()가 선언 된 변수를 기준으로 미분을 한다. 즉 d(res)/dx를 계산한다.
# #d(res)/dx_i = x_i + 1<jupyter_output>tensor([[1., 1.],
        [1., 1.]], requires_grad=True)
tensor([[2., 2.],
        [2., 2.]])
{'fraction_non_alphanumeric': 0.1834975369458128, 'fraction_numerical': 0.034482758620689655, 'mean_word_length': 3.106060606060606, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '665769', 'license': 'MIT', 'n_tokens_mistral': 571, 'n_tokens_neox': 663, 'n_words': 121, 'path': '4_2_Backpropagation.ipynb', 'repo_name': 'Sung-Kyu/Pytorch-sample', 'size': '812'}