

Binary Classification
Deep Learning을 공부하면서 해결할 가장 기본적인 테스크는 Binary Classification(이진 분류)일 겁니다.
Binary 하다는 건 예 / 아니오 등의 두 가지의 답을 가지는 문제를 말하죠. 이진법을 가장 원초적으로 적용하는 문제랄까요.
입력 이미지가 주어졌을 때, 해당 이미지가 고양이인지 아닌지를 판별해본다고 해볼께요.
- y = 1 -> 고양이(cat)
- y = 0 -> 고양이 아님(non-cat)
우리는 이 0 또는 1인지를 분류할 수 있는 모델을 알아보아요.
이미지가 컴퓨터에 저장되는 방식
컴퓨터는 하나의 이미지를 3개의 행렬(Red, Green, Blue 채널)로 저장한다. 64 * 64 픽셀 이미지라면, 각 채널이 64 * 64 행렬이 됩니다.
Feature Vector x
우리는 결국 컴퓨터가 0과 1의 이진법의 형태로 인식할 수 있도록 최대한 다듬어주어야 합니다. 이미지나 글자 자체는 우리 인간만이 이해할 수 있죠. 그래서 최대한 컴퓨터가 이해할 수 있는 형태에 가깝게, 비스무리하게 만들어주어야 합니다.
이진법으로까지 한 번에 바꾸기에는 너무나도 막막하니, 차근차근 하나씩 생각해 봅시다.
먼저 그림을 어떻게 변환해주어야 할까요?
이진법은 숫자 아니겠습니까?
그러니 일단 숫자로 바꿔주어야 지지고 볶든 뭐든 하겠죠?
그럼 어떻게 숫자로 바꿀 수 있을까요?
그래서 우리는 수학을 써야 합니다.
선형대수, 미분과 적분, 함수 등등. 왜 컴퓨터 공학에 수학이 쓰여야 하는지를 실감하는 순간이었습니다.
고등학교 때 인생에서 쓰일 날이 있을까 의문을 가지며 수능 기출문제를 풀었던.. 그 의문이 오늘에서야 풀립니다.
그럼 좀 더 수학스럽게 생각을 해보면, 그림을 한 공간의 유클리드 좌표로 표현해볼 수 있지 않을까요?
좌표를 벡터로 표현해볼 수 있다면 훨씬 컴퓨터가 이해하는, 계산할 수 있는 수준에 다다를 수 있을 것 같네요.
그래서 이미지를 다룰 때에는 벡터, 행렬 등의 개념을 쓰게 됩니다.
이를 깨달을 시점에 저는 아래의 영상을 함께 보았더니 훨씬 CS를 위해 수학을 공부해야 하는 이유와 동기를 찾는데 도움이 됐던 것 같습니다.
https://www.youtube.com/watch?v=ic_hG2M2nG0&list=PLkoaXOTFHiqhVDo0nWybNmihCP_4BjOFR
본론으로 돌아오면,
이미지를 벡터와 행렬로 표현하기 위해서 어떻게 해야할까요?
RGB 세 행렬의 모든 픽셀 값을 하나의 긴 열 벡터로 펼쳐보죠.
색의 3원색 RGB
이 순서대로 Red 픽셀 전체 -> Green 픽셀 전체 -> Blue 픽셀 전체 순서로 나열해봅시다.
$$x = [ 255, 231, ..., (모든 Red), 255, 134, ..., (모든 Green), 255, 134, ..., (모든 Blue) ]^T$$
우리가 앞서 64*64 픽셀 이미지를 다뤄보기로 했기 때문에 이 한 줄에 원소는 총 64 * 64 * 3을 계산해서
12288 차원을 가진 feature vector가 됩니다.
$$n_x = 64 × 64 × 3 = 12,288$$
핵심 표기법(Notation)
단일 훈련 예제를 표시할 때에는
x라는 input과 y라는 label(정답)을 한 쌍으로 표시합니다.
x라는 하나의 문제와 y라는 답을 주어 기출문제를 풀게 하는 셈이죠.
$$(x, y) 여기서 x ∈ ℝ^(n_x), y ∈ {0, 1}$$
우리도 고등학교 시절을 겪었듯 기출문제는 한 문제만 풀지 않죠.
컴퓨터도 그렇습니다.
m개의 예제를 가진 훈련 세트를 이용해서 보통 학습을 시키죠.
$${(x⁽¹⁾, y⁽¹⁾), (x⁽²⁾, y⁽²⁾), ..., (x⁽ᵐ⁾, y⁽ᵐ⁾)}$$
- m(또는 m_train): 훈련 예제의 수
- m_test: 테스트 예제의 수
input matrix X

$n_x * m$ 행렬을 표현한 겁니다.
- Python으로 표현하면 X.shape = (n_x, m)
- 물론 행을 기준으로 쌓는 경우도 있습니다. 하지만 학부에서도, 여기에서 그리고 다른 프로젝트를 할 때에도 대부분 열벡터 기준으로 사용하는 것 같습니다. 그리고 이 방식이 neural network 구현에도 더 편리해요.
output vector Y
$$ Y = [y⁽¹⁾, y⁽²⁾, ..., y⁽ᵐ⁾]$$
이 때는 Y.shape = (1, m) 입니다.
핵심은 서로 다른 훈련 예제의 데이터(x, y 등) 각 열(column)에 쌓는다는 겁니다.
'CS & AI > Deep Learning' 카테고리의 다른 글
| [Coursera] Gradient Descent / Deep Learning Specialization (0) | 2026.03.26 |
|---|---|
| [Coursera] Cost Function / Deep Learning Specialization (0) | 2026.03.26 |
| [Coursera] Logistic Regression / Deep Learning Specialization (0) | 2026.03.25 |
| [Coursera] What is Neural network? / Deep Learning Specialization (0) | 2026.03.02 |
| [Coursera] Deep Learning Specialization - Andrew Ng (0) | 2026.03.02 |
나의 성장 드라마
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!