AI 정리

행렬(Matrix)

dawon-project 2025. 3. 24. 23:16

행렬 (Matrix) : 직사각형 모양의 숫자의 배열

-> 다량의 데이터를 한번에 표현할 수 있는 좋은 수단

-> 텐서(tensor), 선형 계(linear system)의 표현, 미분 방정식의 풀이 등등에서 활발하게 쓰인다.

 

행렬의 차원(Dimension) : 행(row, 가로) x 열(column, 세로) -> 2차원 행렬일때  [ [ , ] [ , ] ....]

 

벡터(Vector) : M x 1차원의 행렬(Matrix)

-> 즉, 하나의 열을 가지며 여러 개의 행만을 가지기 때문에 벡터 내부 데이터의 수가 곧 벡터의 차원(Dimension)이 된다.

행렬의 덧셈(Matrix Addition) : 같은 위치에 있는 숫자끼리 더해주는 것

-> 같은 m x n 차원의 행렬끼리만 덧셈이 가능하다

행렬에 단순한 스칼라(상수) 값을 곱하는 경우 : 행렬의 각 숫자마다 해당 스칼라 값을 곱해주는 것

-> +, /, x 등 여러 가지의 연산이 섞여 있는 경우 : 사칙 연산의 규칙과 동일하게 곱하기와 나눗셈을 먼저 진행하고, 나머지 합과 차 연산을 진행하면 된다.

 

행렬과 벡터의 곱 : M x N 차원의 행렬 A와 N 차원 벡터를 곱하면 M 차원의 벡터가 도출된다.

-> 주의할 점 : 행렬의 열(n1)과 벡터의 행(m2)의 크기가 같아야 곱 연산이 가능 ( n1 = m2 )

-> 행렬의 결과 값은 m1 x n2 의 크기가 나온다.

 

행렬과 행렬의 곱 

행렬의 특성

1. 행렬과 행렬의 곱에서는 교환 법칙이 성립하지 않는다. 

-> 다만 Scalar x Matrix에서는 교환 법칙이 성립

2. Matrix x Matrix 에서 결합 법칙은 성립한다.

3. 연립 방정식을 행렬로 표현해 계산이 가능하다.

단위 행렬(Identity Matrix) : 왼쪽 위에서 오른쪽 아래 대각선 방향의 성분이 1이고, 다른 성분은 모두 0인 n 차 정사각 행렬

-> n차 단위 행렬이라하고 'I'로 기호화한다.

역행렬(Inverse Matrix) : 

전치 행렬(Matirx Transpose) : 열과 행을 바꾼 행렬 / M x N -> N x M

-> Matrix 곱 연산에서 두개의 행렬의 크기를 맞추는데 사용

 

행렬로 연립방정식을 표현해 줄 수있지만 왜 굳이 복잡해 보이기만 하는 행렬로 연립방정식을 표현해줘야 하는 이유는?

-> 컴퓨터를 이용해 연립 방정식을 풀 수 있게 하려고 하는 것

 

<딥러닝 할때 헷갈리는 자료형들 비교>

텐서 : 다차원 배열을 표현하는 자료구조 -> (행, 열)

-> 기본 float 타입

numpy에서의 행렬 -> (행, 열)

-> 기본 int 타입

openCV에서 이미지 표현 -> (열 ,행 )

-> 기본 int 타입

-> 이미지에서 (0,0)은 왼쪽 상단을 의미한다.

딥러닝에서 행과 열이 의미하는 바

  • 다중 선형 회귀 행렬 연산

  • 샘플(Sample)과 특성(Feature)
    -> 종속 변수 y를 예측하기 위한 독립 변수 x를 특성이라 부른다.

  • 가중치 행렬 결과에 행이 추가 되는 경우
    • 데이터 샘플의 개수가 늘어남을 의미

  • 가중치 행렬 결과에 열이 추가되는 경우
    • 노드의 개수가 늘어남을 의미

1. 데이터 구조란?

데이터 구조는 메모리에서 데이터가 어떻게 저장되어 있는지를 의미

  • OpenCV와 NumPy 모두 이미지 = (H, W, C) 구조로 저장된다.
    -> 즉, 이미지 자체는 (높이, 너비, 채널) 순서로 저장
  • 예를 들어, (3, 4, 3) 크기의 이미지가 있다면:
    • 높이 (H) = 3
    • 너비 (W) = 4
    • 채널 (C) = 3

[
    [[R, G, B], [R, G, B], [R, G, B], [R, G, B]],  # 1번째 행 (y=0)
    [[R, G, B], [R, G, B], [R, G, B], [R, G, B]],  # 2번째 행 (y=1)
    [[R, G, B], [R, G, B], [R, G, B], [R, G, B]]   # 3번째 행 (y=2)
]

즉, OpenCV와 NumPy 모두 데이터 자체는 (H, W, C) 순서로 저장된다.

-> PyTorch의 데이터는 (C, H, W) 순서로 저장된다.

2. 좌표 해석 방식이란?

좌표 해석 방식은 저장된 데이터를 어떻게 읽을 것인지를 결정하는 기준

-> 좌표 해석은 (3,3) 처럼 단일 좌표를 뜻하고,

-> 데이터 구조란 해당 좌표들의 묶음을 뜻한다

🔹 OpenCV의 좌표 해석 (영상 좌표계)

  • OpenCV는 영상(이미지) 좌표계를 사용
  • OpenCV에서 img[(col,세로)y, (row, 가로)x] 
  • 하지만 데이터는 (H, W, C) 구조로 저장됨.

🔹 NumPy의 좌표 해석 (행렬 좌표계)

  • NumPy는 행렬(수학적 행렬) 좌표계를 사용
  • (row, column) = (행, 열) = (가로, 세로)
  • 즉, NumPy에서 img[row, col] 
  • 그리고 NumPy도 데이터를 (H, W, C) 구조로 저장함.

🔹 PyTorch의 좌표 해석 (행렬 좌표계)

  • PyTorch는 행렬(수학적 행렬) 좌표계를 사용
  • (row, column) = (행, 열) = (가로, 세로)
  • 즉, PyTorch에서 img[row, col] 
  • 그리고 PyTorch는 데이터를 (C, H, W) 구조로 저장함.

3. 데이터 구조 vs. 좌표 해석 방식

라이브러리데이터 저장 구조 (H, W, C) or (C, H, W)좌표 해석 방식
OpenCV (H(높이), W(너비), C(채널,BGR)) (x, y) = (열, 행)
NumPy (H, W, C(RGB))  (r, c) = (행, 열)
PyTorch (C(RGB), H, W) (채널, 행, 열)

OpenCV와 NumPy는 (H, W, C) 구조지만, PyTorch는 (C, H, W) 구조
좌표 해석 방식은 OpenCV는 (열, 행), NumPy는 (행, 열), PyTorch는 (채널, 행, 열)

 

4. 라이브러리 간 변환할때 주의해야 할점

 

NumPy → PyTorch permute(2, 0, 1) → (H, W, C) → (C, H, W), float() / 255.0 필요
PyTorch → NumPy permute(1, 2, 0) → (C, H, W) → (H, W, C), byte() * 255 필요
OpenCV → PyTorch cv2.COLOR_BGR2RGB, permute(2, 0, 1), float() / 255.0
PyTorch → OpenCV permute(1, 2, 0), cv2.COLOR_RGB2BGR, byte() * 255

 

'AI 정리' 카테고리의 다른 글

딥러닝 아키텍처(Architecture)  (0) 2025.03.24
Pytorch  (0) 2025.03.24
Validation  (0) 2025.03.23
딥러닝 기본적인 모델 유형  (0) 2025.03.22
Overfitting+ Internal Covariate Shift와 해결 방법  (0) 2025.03.19