[νŒŒμ΄ν† μΉ˜] νŒŒμ΄ν† μΉ˜ 기초 μš”μ†Œ (ν…μ„œνŽΈ)

Posted by Euisuk's Dev Log on September 14, 2021

[νŒŒμ΄ν† μΉ˜] νŒŒμ΄ν† μΉ˜ 기초 μš”μ†Œ (ν…μ„œνŽΈ)

원본 κ²Œμ‹œκΈ€: https://velog.io/@euisuk-chung/νŒŒμ΄ν† μΉ˜-기초-μš”μ†Œ-ν…μ„œνŽΈ

μ˜€λŠ˜μ€ νŒŒμ΄ν† μΉ˜λ₯Ό 닀루기 μœ„ν•΄ μ€‘μš”ν•œ 기초 지식듀 쀑 ν…μ„œμ— λŒ€ν•΄ 닀루어볼 μ˜ˆμ •μž…λ‹ˆλ‹€.

Tensor

Source : https://hadrienj.github.io/posts/Deep-Learning-Book-Series-2.1-Scalars-Vectors-Matrices-and-Tensors/

ν…μ„œ

  • ν…μ„œλŠ” β€˜λ°μ΄ν„°λ₯Ό ν‘œν˜„ν•˜λŠ” λ‹¨μœ„β€™μž…λ‹ˆλ‹€.
  • 크게 scalar, vector, matrix,tensor둜 λΆ„λ₯˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Scalar

  • 슀칼라(scalar)λŠ” μš°λ¦¬κ°€ ν”νžˆ μˆ˜ν•™μ—μ„œ λΆ€λ₯΄λŠ” μƒμˆ˜ 값이라고 보면 λ©λ‹ˆλ‹€.
  • Pytorch λͺ¨λ“ˆμ—μ„œ 이λ₯Ό ν™œμš©ν•΄μ£ΌκΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ™€ 같이 import torch ν›„ torch λͺ¨λ“ˆμ— λ‚΄μž₯λ˜μ–΄ μžˆλŠ” tensor λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ λ‹€μŒκ³Ό 같이 슀칼라 값을 μ •μ˜ν•΄μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’» μ½”λ“œ

1
2
3
4
5
6
import torch

# ν…μ„œ λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ 슀칼라 κ°’ μ •μ˜
scalar = torch.tensor([2.])
print(scalar) # κ°’ 좜λ ₯
print(scalar.shape) # μ‚¬μ΄μ¦ˆ 좜λ ₯

πŸ’» κ²°κ³Ό

1
2
tensor([2.])
torch.Size([1])

β€» μ—¬κΈ°μ„œ 잠깐 β€»

πŸ’‘ [슀칼라의 μ—°μ‚°]

μŠ€μΉΌλΌλŠ” μš°λ¦¬κ°€ ν”νžˆ μ•Œκ³  μžˆλŠ” +,-,*,/의 사칙연산 기호 λ˜λŠ” torch λͺ¨λ“ˆμ˜ λ‚΄μž₯된 λ©”μ„œλ“œμΈ add, sub, mul, div을 μ΄μš©ν•˜μ—¬ 사칙연산을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Vector

  • 벑터(vector)λŠ” μˆ˜ν•™ κ°œλ…μœΌλ‘œ 크기와 λ°©ν–₯을 κ°–λŠ” λ¬Όλ¦¬λŸ‰μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • 일반적으둜 λ²‘ν„°λŠ” μ‹œμž‘μ κ³Ό 끝점을 μ—°κ²°ν•˜λŠ” ν™”μ‚΄ν‘œλ‘œ ν‘œμ‹œν•  수 μžˆλŠ”λ°, μ‹œμž‘μ μ„ (0,)이라고 ν•˜λ©΄ λ²‘ν„°λŠ” n차원 곡간 μƒμ˜ μ’Œν‘œλΌκ³  생각할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • Pytorch λͺ¨λ“ˆμ—μ„œ 이λ₯Ό ν™œμš©ν•΄μ£ΌκΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ™€ 같이 import torch ν›„ torch λͺ¨λ“ˆμ— λ‚΄μž₯λ˜μ–΄ μžˆλŠ” tensor λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ λ‹€μŒκ³Ό 같이 벑터λ₯Ό μ •μ˜ν•΄μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’» μ½”λ“œ

1
2
3
4
5
6
import torch

# ν…μ„œ λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ 벑터 μ •μ˜
vector = torch.tensor([1., 2., 3.])
print(vector) # κ°’ 좜λ ₯
print(vector.shape) # μ‚¬μ΄μ¦ˆ 좜λ ₯

πŸ’» κ²°κ³Ό

1
2
tensor([1., 2., 3.])
torch.Size([3])

β€» μ—¬κΈ°μ„œ 잠깐 β€»

πŸ’‘ [λ²‘ν„°μ˜ μ—°μ‚°]

벑터 μ—­μ‹œ μš°λ¦¬κ°€ ν”νžˆ μ•Œκ³  μžˆλŠ” +,-,*,/의 사칙연산 기호 λ˜λŠ” torch λͺ¨λ“ˆμ˜ λ‚΄μž₯된 λ©”μ„œλ“œμΈ add, sub, mul, div을 μ΄μš©ν•˜μ—¬ 사칙연산을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ μ£Όμ˜ν•΄μ•Ό ν•  점은 κ³±μ…ˆκ³Ό λ‚˜λˆ—μ…ˆμ˜ 경우 각 μš”μ†Œλ³„λ‘œ(element-wise) 연산을 μˆ˜ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€. 슀칼라 μ—°μ‚°μ—μ„œ ν•œκ°€μ§€ μΆ”κ°€λ˜λŠ” 것이 μžˆλŠ” 데 λ°”λ‘œ λ‚΄μ μž…λ‹ˆλ‹€. 내적은 torch λͺ¨λ“ˆμ˜ λ‚΄μž₯된 λ©”μ„œλ“œμΈ dot을 μ΄μš©ν•΄μ„œ μ‚¬μš©ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

Matrix

  • ν–‰λ ¬(matrix)μ΄λž€ μ‹€μˆ˜ λ˜λŠ” λ³΅μ†Œμˆ˜λ₯Ό μœ„ 그림의 μ’Œλ³€κ³Ό 같이 μ§μ‚¬κ°ν˜•μœΌλ‘œ λ°°μ—΄ν•œ 것을 λ§ν•©λ‹ˆλ‹€. 즉, 이 말은 2개 μ΄μƒμ˜ 벑터λ₯Ό ν•©μ³μ„œ κ΅¬μ„±ν•œ 것이 κ³§ 행렬이 되게 λ©λ‹ˆλ‹€.
  • 행렬은 벑터 κ°„ 연산을 λΉ λ₯΄κ²Œ μ§„ν–‰ν•  수 μžˆλŠ” μ„ ν–‰ λŒ€μˆ˜μ˜ κΈ°λ³Έ λ‹¨μœ„μž…λ‹ˆλ‹€.
  • Pytorch λͺ¨λ“ˆμ—μ„œ 이λ₯Ό ν™œμš©ν•΄μ£ΌκΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ™€ 같이 import torch ν›„ torch λͺ¨λ“ˆμ— λ‚΄μž₯λ˜μ–΄ μžˆλŠ” tensor λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ λ‹€μŒκ³Ό 같이 행렬을 μ •μ˜ν•΄μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’» μ½”λ“œ

1
2
3
4
5
6
import torch

# ν…μ„œ λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ ν–‰λ ¬ μ •μ˜
matrix = torch.tensor([[1., 2.],[3., 4.]])
print(matrix) # κ°’ 좜λ ₯
print(matrix.shape) # μ‚¬μ΄μ¦ˆ 좜λ ₯

πŸ’» κ²°κ³Ό

1
2
3
tensor([[1., 2.],
        [3., 4.]])
torch.Size([2, 2])

β€» μ—¬κΈ°μ„œ 잠깐 β€»

πŸ’‘ [ν–‰λ ¬μ˜ μ—°μ‚°]

ν–‰λ ¬ μ—­μ‹œ μš°λ¦¬κ°€ ν”νžˆ μ•Œκ³  μžˆλŠ” +,-,*,/의 사칙연산 기호 λ˜λŠ” torch λͺ¨λ“ˆμ˜ λ‚΄μž₯된 λ©”μ„œλ“œμΈ add, sub, mul, div을 μ΄μš©ν•˜μ—¬ 사칙연산을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ μ£Όμ˜ν•΄μ•Ό ν•  점은 κ³±μ…ˆκ³Ό λ‚˜λˆ—μ…ˆμ˜ 경우 각 μš”μ†Œλ³„λ‘œ(element-wise) 연산을 μˆ˜ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€. 슀칼라 μ—°μ‚°μ—μ„œ ν•œκ°€μ§€ μΆ”κ°€λ˜λŠ” 것이 μžˆλŠ” 데 λ°”λ‘œ ν–‰λ ¬ κ³± μ—°μ‚°μž…λ‹ˆλ‹€. 내적은 torch λͺ¨λ“ˆμ˜ λ‚΄μž₯된 λ©”μ„œλ“œμΈ matmul을 μ΄μš©ν•΄μ„œ μ‚¬μš©ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. matmul은 matrix multiply의 μ€„μž„λ§μž…λ‹ˆλ‹€.

Tensor

  • ν…μ„œ(tensor)λž€ 맀우 μˆ˜ν•™μ μΈ κ°œλ…μœΌλ‘œ λ°μ΄ν„°μ˜ 배열이라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν…μ„œλŠ” μ—„λ°€νžˆ λ§ν•˜λ©΄ μ•žμ—μ„œ μ†Œκ°œν•œ scalar, vector, matrix λͺ¨λ‘λ₯Ό μ•„μš°λ₯΄λŠ” κ°œλ…μ΄λ©° μ•„λž˜μ˜ ν‘œμ™€ 같이 정리될 수 μžˆμŠ΅λ‹ˆλ‹€. (μ™œ μ—¬νƒœκΉŒμ§€ scalar, vector, matrixλ₯Ό μ„ μ–Έν•˜λŠ” 데 torch.tensorλ₯Ό μ»λŠ”μ§€ μ•„μ‹œκ² μ£ ?γ…Žγ…Ž)
RANK TYPE EXAMPLE
0 scalar [1]
1 vector [1,2]
2 matrix [[1,2],[3,4]]
3 3d-tensor [[[1,2],[3,4]],[[5,6],[7,8]]]
n nd-tensor [[[1,2],[3,4]],[[5,6],[7,8]], …]
  • λ‹€μŒμ€ 슀칼라, 벑터, ν–‰λ ¬, ν…μ„œλ₯Ό 그림으둜 ν‘œν˜„ν•œ κ²ƒμž…λ‹ˆλ‹€.

Tensor

Source : https://hadrienj.github.io/posts/Deep-Learning-Book-Series-2.1-Scalars-Vectors-Matrices-and-Tensors/

  • Pytorch λͺ¨λ“ˆμ—μ„œ 이λ₯Ό ν™œμš©ν•΄μ£ΌκΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ™€ 같이 import torch ν›„ torch λͺ¨λ“ˆμ— λ‚΄μž₯λ˜μ–΄ μžˆλŠ” tensor λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ λ‹€μŒκ³Ό 같이 ν…μ„œλ₯Ό μ •μ˜ν•΄μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’» μ½”λ“œ

1
2
3
4
5
6
import torch

# ν…μ„œ λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ tensor μ •μ˜
tensor_ = torch.tensor([[[1,2],[3,4]],[[5,6],[7,8]]])
print(tensor_) # κ°’ 좜λ ₯
print(tensor_.shape) # μ‚¬μ΄μ¦ˆ 좜λ ₯

πŸ’» κ²°κ³Ό

1
2
3
4
5
6
tensor([[[1, 2],
         [3, 4]],

        [[5, 6],
         [7, 8]]])
torch.Size([2, 2, 2])

β€» μ—¬κΈ°μ„œ 잠깐 β€»

πŸ’‘ [ν…μ„œμ˜ μ—°μ‚°]

ν…μ„œμ˜ 연산은 ν–‰λ ¬μ˜ ν™•μž₯νŒμ΄κΈ°μ— λ™μΌν•©λ‹ˆλ‹€.



-->