본문 바로가기
Music AI/Deep Learning

[Deep Learning] 01 이진 분류 | W2 신경망과 로지스틱 회귀 | C1 신경망과 딥러닝 | Andrew Ng

by 2den 2025. 7. 11.
728x90
반응형

https://www.youtube.com/watch?v=eqEc66RFY0I

 

돌아온 것을 환영합니다. 이번 주에는 신경망 프로그래밍의 기초를 살펴보겠습니다. 신경망을 구현할 때에 정말 중요한 몇몇 구현 기법들이 있습니다. 예를 들면 $m$개의 훈련 샘플의 훈련 세트가 있을 때 훈련 세트를 처리하는 익숙한 방법은 아마 for 문을 이용해 $m$개의 데이터를 일일이 보는 것입니다. 사실은 훈련 세트를 처리할 때 보통 for 문을 굳이 사용하지 않고 처리하길 원할 것입니다. 어떻게 하는지는 이번 주 수업을 통해 배우겠습니다.

 

하나 더 예를 들면 보통 신경망의 계산 과정을 살펴볼 때 정방향 패스 또는 정방향 전파라는 단계 뒤에 역방향 패스 또는 역방향 전파라는 단계가 있습니다. 그래서 이번 주 수업을 통해 신경망을 학습하는 계산 과정이 왜 정방향 전파와 역방향 전파로 구성되어 있는지에 대한 직관 또한 얻을 것입니다.

 

이번 주에는 이런 원리들을 더 쉽게 이해할 수 있도록  로지스틱 회귀를 이용하겠습니다. 로지스틱 회귀를 전에 보았더라도 이번 수업을 통해 얻는 게 있을 거로 생각합니다. 자 이제 시작해 봅시다.

 


 

(1) 1 (cat) vs 0 (non cat)

 

로지스틱 회귀는 이진 분류를 위한 알고리즘입니다. 먼저 문제를 설정해 봅시다. 이진 분류 문제의 예 하나를 한 번 살펴봅시다. 이러한 사진이 입력으로 주어졌을 때 두 범주 중 어떻게 분류했는지 출력하기를 원합니다. 고양이 사진으로 알아보았을 때 1을 출력하고 고양이 사진이 아니라고 판단하면 0을 출력하고 싶습니다. 이때 $y$로 출력 레이블을 표시하겠습니다.

 

(2) 사진이 컴퓨터에 저장되는 방법

 

이제 사진이 어떻게 컴퓨터에 저장되는지 알아봅시다. 이 사진의 빨간 초록 파란색 채널들과 일치하는 세 개의 행렬을 따로따로 저장합니다. 그러므로 입력된 사진이 64 x 64픽셀이라면 세 개의 64 x 64 행렬들이 사진의 빨간 초록 파란색 픽셀 강도 값을 나타냅니다. 하지만 보여주기 위해서 여기에는 훨씬 작은 행렬들로 그렸습니다. 64 x 64 대신 5 x 4 행렬들로 나타냈습니다.

 

$x = \begin{bmatrix}255 \\231 \\\vdots \\255 \\134 \\\vdots\end{bmatrix}$

 

이 픽셀 강도 값들을 특성 벡터로 바꾸려면 모든 픽셀값을 입력될 특성 벡터 $x$의 한 열로 나열할 겁니다. 픽셀값을 하나의 벡터로 펼치기 위해서 주어진 사진에 대한 특성 벡터 $x$를 다음과 같이 정의하겠습니다. 픽셀값 전부를 차례대로 255, 231 등등 모든 빨간색 픽셀들을 나열하고, 뒤이어 255, 134 등등 매우 긴 특성 벡터가 되도록 이 사진의 모든 빨간 초록 파란색 픽셀 강도 값들을 나열합니다.

 

그러므로 이 사진이 64 x 64일 경우 벡터 $x$의 전체 차원은 64 x 64 x 3가 됩니다. 왜냐하면 이 행렬들의 원소들을 포함하고 있기 때문입니다. 이 경우에는 12,288입니다. 곱해서 나온 수이죠. 12,288인 입력 특성 벡터 $x$의 차원을 $n_x$로 표현할 것이고, 때로는 간결함을 위해서 소문자 $n$을 쓰겠습니다.

 

이진 분류의 목표는 입력된 사진을 나타내는 특성 벡터 $x$를 가지고 그에 대한 레이블 $x$가 1 아니면 0, 다시 말해 고양이 사진인지 아닌지를 예측할 수 있는 분류기를 학습하는 것입니다.

 


 

$(x, y), \quad x \in \mathbb{R}^{n_x}, \quad y \in \{0, 1\}$

 

이제 지금부터 자주 쓸 표기법을 소개하겠습니다. 단 하나의 훈련 샘플을 한 쌍 $(x,y)$로 표시할 때, $x$는 $n_x$차원 상의 특성 벡터이고, 레이블 $y$는 0 또는 1입니다.

 

$m \text{ training exs: } \{{(x^{(1)}, y^{(1)}),(x^{(2)}, y^{(2)}),..., (x^{(m)}, y^{(m)})}\}$

 

훈련 세트는 $m$개의 훈련 샘플을 포함하고 다음과 같이 표기될 것입니다. 첫 번째 훈련 샘플의 입력과 출력인 $(x^{(1)}, y^{(1)})$, 두 번째 훈련 샘플인 $(x^{(2)},y^{(2)})$부터, 마지막 훈련 샘플인 $(x^{(m)}, y^{(m)})$ 까지 다 합한 것이 훈련 세트가 됩니다. 훈련 샘플의 개수를 m으로 표시할 것입니다. 때때로 무엇을 의미하는지 강조하기 위해 $m_{train}$이라 쓸 수 있고, 테스트 세트에 대해서는 테스트 세트의 개수를 $m_{test}$로 표시할 것입니다.

 

$X = \begin{bmatrix}\vert & \vert & & \vert \\x^{(1)} & x^{(2)} & \cdots & x^{(m)} \\\vert & \vert & & \vert\end{bmatrix} \in \mathbb{R}^{n_x \times m}$

 

마지막으로 모든 훈련 샘플들을 더 간결하게 표기하기 위해 행렬 $X$를 위와 같이 정의하겠습니다. $X$의 열들을 입력된 훈련 세트 $x^{(1)}$, $x^{(2)}$ 등으로 이루어져 있습니다. $x^{(1)}$은 이 행렬의 첫 열로 놓고, $x^{(2)}$는 두 번째 열로, $x^{(m)}$까지 $m$번째 열로 놓으면 행렬 $X$가 완성됩니다. 그러므로 $m$이 훈련 샘플의 개수일때 $X$는 $m$개의 열과 $n_x$개의 행들로 이루어져 있습니다. 다른 강좌에서는 $X$가 다르게 정의되었을 수도 있습니다. 훈련 세트들을 $X$의 열 대신 행들로 놓는 것입니다. $x^{(1)}$의 전치부터 $x^{(m)}$의 전치까지 말입니다. 하지만 알고 보면 신경망을 구현할때 왼쪽의 방법으로 구현하기가 훨씬 쉽습니다. 요약하자면, $X$는 $n_x$ × $m$ 행렬이고, 파이썬으로 구현한다면 파이썬 명령인 X.shape로 행렬의 차원을 알 수 있습니다. 이 경우에는 $(n_x, m)$을 출력하게 되고, $n_x$ × $m$ 행렬인 것을 뜻합니다. 이렇게 훈련 샘플들 $x$를 행렬로 묶을 수 있습니다.

 

$Y = \begin{bmatrix} y^{(1)} & y^{(2)} & \cdots & y^{(m)} \end{bmatrix} \in \mathbb{R}^{1 \times m}$

 

출력될 레이블 $Y$는 어떨까요? 신경망의 구현을 더 쉽게하기 위해 $y$의 값들을 열로 놓는 것이 편리합니다. 그러므로 $Y$는 $y^{(1)}$, $y^{(2)}$부터 $y^{(m)}$으로 이루어진 1 x $m$ 행렬으로 정의하겠습니다. 다시 한번 파이썬 문법을 사용해 Y.shape를 이용하면 $Y$의 차원이 $(1, m)$임을 알 수 있습니다.

 

나중에 신경망을 구현할 때 여기서 $X$랑 $Y$를 정의한 것처럼 $x$나 $y$, 또는 나중에 볼 여러 훈련 샘플에 관한 데이터를 각각의 열로 놓는 것이 유용할 것입니다.

 


 

이 표기법들이 로지스틱 회귀와 나중에 볼 신경망들을 위한 것입니다. 혹시 $m$이나 $n$이 뭔지 또는 다른 표기법을 까먹었다면 손쉽게 찾을 수 있도록 표기법 가이드를 올려놨으니 참고하여 주시길 바랍니다.

 

다음에는 이 표기법을 이용해 로지스틱 회귀를 더 살펴보겠습니다.

728x90
반응형

댓글