Home [Week 02 / Day 006] ํ•™์Šต ๊ธฐ๋ก
Post
Cancel

[Week 02 / Day 006] ํ•™์Šต ๊ธฐ๋ก

๐Ÿ“ ์˜ค๋Š˜ ํ•œ ์ผ

  • ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ
  • ๊ฐ•์˜ ์ˆ˜๊ฐ• ๋ฐ ์ •๋ฆฌ
    • [PyTorch 1๊ฐ•]
    • [PyTorch 2๊ฐ•]
    • [PyTorch 3๊ฐ•]
  • ํ€ด์ฆˆ ํ’€๊ธฐ
  • ๊ธฐ๋ณธ ๊ณผ์ œ 1 (ํ•˜๋Š” ์ค‘)
  • ํ”ผ์–ด์„ธ์…˜
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” ๋ฌธ์ œ ํ’€์ด


๐Ÿ‘ฅ ํ”ผ์–ด์„ธ์…˜ ์š”์•ฝ

์˜ค๋Š˜ ํ”ผ์–ด์„ธ์…˜์—์„œ๋Š” ๊ฐœ์ธ๋ณ„ ์ง„๋„๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ฐ•์˜ ๋ฐ ๊ณผ์ œ์—์„œ ๊ถ๊ธˆํ•œ ์ ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๊ณ , week01 ๊ณผ์ œ์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ์šฐ์„ , view์™€ reshape์˜ ์ฐจ์ด์ธ contiguity์— ๋Œ€ํ•ด์„œ ๊ฐ€์žฅ ์ด์•ผ๊ธฐ ํ•  ์ ์ด ๋งŽ์•˜๋‹ค. ๊ฐ•์˜์—์„œ๋Š” view๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ํ•˜์…จ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” view๋ฅผ ์“ฐ๋‹ค๋ณด๋ฉด ์—๋Ÿฌ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜์—ฌ reshape์„ ๋” ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ํŒ€์›๋ถ„๋“ค์ด ๊ณ„์…จ๋‹ค. ๋”ฐ๋ผ์„œ ๊ต์ˆ˜๋‹˜๊ป˜์„œ view๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ํ•˜์‹  ๊ฒƒ์€ reshape ์‹œ์—๋Š” ๋ช‡๋ช‡ ๊ฒฝ์šฐ์— copy๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ ์†ํ•ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ถ”์ธกํ•˜์˜€๋‹ค. ๋˜ํ•œ, ๋‚˜๋Š” PyTorch 2๊ฐ• ๊ฐ•์˜์—์„œ ๋ฒกํ„ฐ๋กœ ์ด๋ฃจ์–ด์ง„ ์‹์˜ backward ํ•จ์ˆ˜์—๋Š” gradient๋ฅผ ์™œ ๋ช…์‹œ์ ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์ฃผ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์™œ ๊ทธ tensor์˜ ๊ฐ’์€ [1., 1.]์ธ์ง€ ๊ถ๊ธˆํ–ˆ์—ˆ๋Š”๋ฐ, ์šฐ์„ ์€ computational graph์—์„œ backprop์„ ์ง„ํ–‰ํ•  ๋•Œ ์ฒ˜์Œ input์œผ๋กœ 1์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด ๊ด€๋ จ์ด ์žˆ์ง€ ์•Š์„๊นŒ๋ผ๊ณ  ๊ฒฐ๋ก ์„ ์ง€์—ˆ๋‹ค.

1
2
3
4
5
6
7
8
a = torch.tensor([2., 3.], requires_grad=True
b = torch.tensor([6., 4.], requires_grad=True
Q = 3*a**3 - b**2
external_grad = torch.tensor([1., 1.])
Q.backward(gradient=external_grad)

a.grad    # tensor([36., 81.])
b.grad    # tensor([-12.,  -8.])

๐Ÿ’ก PyTorch ํŠœํ† ๋ฆฌ์–ผ
โ‡’ Qย ๋Š” ๋ฒกํ„ฐ(vector)์ด๋ฏ€๋กœย Q.backward()ย ์—ย gradientย ์ธ์ž(argument)๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.ย gradientย ๋Š”ย Qย ์™€ ๊ฐ™์€ ๋ชจ์–‘(shape)์˜ ํ…์„œ๋กœ,ย Qย ์ž๊ธฐ ์ž์‹ ์— ๋Œ€ํ•œ ๋ณ€ํ™”๋„(gradient)๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰ $\frac{dQ}{dQ} = 1$์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ง€๋‚œ์ฃผ ๊ณผ์ œ์— ๋Œ€ํ•ด ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ๋” ๊น”๋”ํ•œ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž, IDE๋กœ ํŒŒ์ด์ฐธ ์‚ฌ์šฉํ•˜๊ธฐ ๋“ฑ์ด ์žˆ์—ˆ๋‹ค.


๐Ÿ“š ๊ณผ์ œ ๋‚ด์šฉ ์ •๋ฆฌ

๊ธฐ๋ณธ ๊ณผ์ œ 1์„ ์•„์ง ํ‘ธ๋Š” ์ค‘์ด๋‹ค.


๐Ÿพ ์ผ์ผ ํšŒ๊ณ 

์ด๋ฒˆ์ฃผ๋Š” PyTorch๋ฅผ ๋ฐฐ์šด๋‹ค. ํ•™๊ต ์ˆ˜์—…์‹œ๊ฐ„์—๋Š” (์•„์ฃผ ์ž ๊น) TensorFlow๋งŒ ์จ๋ดค์—ˆ๊ณ , PyTorch๋Š” ์กฐ๊ธˆ ๋”ฐ๋ผํ•ด ๋ณธ ์ •๋„๋กœ ๋ฐ–์— ๊ฒฝํ—˜์ด ์—†๋Š”๋ฐ, ์ด๋ฒˆ ๊ธฐํšŒ์— ๋งŽ์ด ์ต์ˆ™ํ•ด์กŒ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๋‚œ์ฃผ์™€ ๋‹ค๋ฅด๊ฒŒ ์ด๋ฒˆ์—๋Š” ๊ฐ•์˜ ๋ถ„๋Ÿ‰์ด ์ ์ ˆํ•œ ๊ฒƒ ๊ฐ™์•„ ๋‹คํ–‰์ด๋‹ค. (๋•๋ถ„์— ์‹ค์Šต์„ ๋”ฐ๋ผ ํ•ด๋ณด๋Š” ๋ฐ์— ๋” ๋งŽ์ด ํˆฌ์žํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.) ๋น„๋ก ์˜ค๋Š˜์€ ํŒ€ ๊นƒํ—ˆ๋ธŒ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ์‹œ๊ฐ„์„ ์Ÿ๋Š๋ผ ํ”ผ์–ด์„ธ์…˜ ์ „๊นŒ์ง€ ๊ณ„ํš๋œ ๋ถ„๋Ÿ‰์„ ๋‹ค ํ•˜์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒโ€ฆ ๐Ÿ˜ฅ ๋˜ํ•œ, ์ด๋ฒˆ์ฃผ๋Š” ๋‚ด๊ฐ€ ๋ชจ๋”๋ ˆ์ดํ„ฐ๋ฅผ ๋งก์•˜๋‹ค. ๋‚˜๋Š” ์ด๋Ÿฐ ์—ญํ• ์„ ๋งก์„ ๋•Œ๋งˆ๋‹ค ๋‚ด ์ž์‹ ์ด ๋„ˆ๋ฌด ๋ถ€์กฑํ•˜๊ฒŒ ๋Š๊ปด์ง„๋‹ค. ๊ทธ๋ž˜๋„ ์ตœ์„ ์„ ๋‹คํ•ด์•ผ๊ฒ ๋‹ค!


๐Ÿš€ ๋‚ด์ผ ํ•  ์ผ

  • ๊ฐ•์˜ ์ˆ˜๊ฐ• & ์ •๋ฆฌ
    • [PyTorch 4๊ฐ•]
    • [PyTorch 5๊ฐ•]
  • ํ€ด์ฆˆ ํ’€๊ธฐ
  • ๊ธฐ๋ณธ ๊ณผ์ œ 1 ๋งˆ๋ฌด๋ฆฌ
  • ๊ธฐ๋ณธ ๊ณผ์ œ 2
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” ๋ฌธ์ œ ํ’€์ด
  • git blog ์ •๋น„ํ•˜๊ธฐ
This post is licensed under CC BY 4.0 by the author.

[Week 01 / Day 005] ํ•™์Šต ๊ธฐ๋ก

[Week 02 / Day 007] ํ•™์Šต ๊ธฐ๋ก