코사인 유사도와 LP 노름
코사인 유사도는 두 특징 벡터가 얼마나 같은 방향을 가리키고 있는지를 재는 척도입니다. 두 벡터의 각도가 같으면 1, 90도면 0, 180도면 -1이 됩니다. 특징 공간에서 코사인 유사도가 높다는 건 두 특징이 의미론적으로 비슷하다는 뜻이에요. 예를 들어 고양이의 눈과 강아지의 눈은 서로 다른 눈이지만, 둘 다 '눈'이라는 같은 의미를 가지기 때문에 높은 코사인 유사도를 가질 수 있습니다.
LP 노름은 원점과의 거리를 재는 방법입니다. p가 1이면 격자 세계에서의 거리, 즉 x축으로 몇 칸, y축으로 몇 칸처럼 더하는 방식이고, p가 2면 우리가 자로 실제로 잰 유클리디안 거리가 됩니다. p 값에 따라 거리를 측정하는 특성이 조금씩 달라집니다.
결정 직선과 결정 초평면
특징이 두 개일 때 두 클래스를 나누는 선을 결정 직선이라고 합니다. 특징이 세 개면 그 선이 평면이 되고, 3차원을 넘어가면 사람이 시각적으로 볼 수 없는 하이퍼 디멘전이 됩니다. 이 하이퍼 디멘전에서 정의된 평면을 결정 초평면이라고 부릅니다.
출력이 여러 개인 퍼셉트론은 사실 독립적인 퍼셉트론 여러 개를 묶어놓은 거예요. 입력이 같아서 하나처럼 표기할 뿐이고, 각 클래스마다 별도의 가중치 벡터가 존재합니다. 세 가지 꽃 종류를 분류한다면 세 개의 독립적인 퍼셉트론이 각각 '세토사냐 아니냐', '버시컬러냐 아니냐', '버지니카냐 아니냐'를 판단하는 식입니다.
벡터 공간과 기저 벡터
벡터는 공간상의 한 점으로, 화살표 끝이 벡터의 좌표에 해당합니다. 벡터가 살아갈 공간을 먼저 정의해야 하는데, 이 공간을 기저 벡터의 선형 결합으로 만들어냅니다.
예를 들어 2차원 좌표계의 점 (2, 3)은 사실 x축 기저 벡터에 2를 곱하고, y축 기저 벡터에 3을 곱해서 더한 값입니다. 기저 벡터가 두 개 있으면 이 둘의 조합으로 무수히 많은 벡터를 만들어낼 수 있고, 이렇게 만들어지는 공간이 벡터 공간입니다.
기저 벡터 중에서 특별히 정규직교 기저 벡터가 있습니다. 정규(Normalized)는 크기가 1인 벡터를 뜻하고, 직교(Orthogonal)는 두 벡터가 이루는 각이 정확히 90도라는 뜻입니다. 90도면 코사인 유사도가 0이 되어 서로 완전히 독립적인 거죠. 우리가 일반적으로 쓰는 (1,0)과 (0,1)이 대표적인 정규직교 기저 벡터입니다.
역행렬과 행렬식
역행렬은 역수와 같은 개념입니다. 어떤 행렬 A를 곱했을 때 원래 값으로 되돌리려면 A의 역행렬을 곱하면 되고, 역행렬과 자기 자신을 곱하면 항등행렬(단위행렬)이 나옵니다.
역행렬이 존재하려면 몇 가지 조건을 만족해야 합니다. 먼저 정사각 행렬(n×n)이어야 하고, 행렬식(determinant)이 0이 아니어야 하며, 모든 행과 열이 선형 독립이어야 합니다.

행렬식의 기하학적 의미는 행렬을 구성하는 벡터들이 만들어내는 면적 또는 부피입니다. 두 벡터가 같은 방향을 가리키고 있으면 면적을 정의할 수 없어서 행렬식이 0이 됩니다. 이 경우 역행렬이 존재하지 않고, 이런 행렬을 특이행렬이라고 부릅니다.
랭크(Rank)는 선형 독립인 벡터의 개수입니다. n×n 행렬에서 랭크가 n이면 풀랭크(Full Rank)라고 하고, 이때만 역행렬이 존재합니다. 한 벡터를 다른 벡터의 상수배로 만들 수 있다면 선형 종속이고, 그 벡터는 새로운 차원을 만들어내지 못합니다.
고유값 분해
정수를 소인수 분해하듯이 행렬도 고유값과 고유 벡터라는 핵심 요소로 분해할 수 있습니다.
어떤 행렬 A에 특정 벡터 v를 곱했을 때 출력이 v의 상수배가 된다면, 이 v를 A의 고유 벡터, 그 상수를 고유값(λ)이라고 합니다. 모든 벡터가 고유 벡터가 되는 건 아니에요. 어떤 특정한 벡터를 집어넣었을 때만 자기 자신의 상수배가 나오는 거죠.
고유값이 클수록 행렬을 구성하는 데 중요한 역할을 하는 벡터입니다. 반대로 고유값이 아주 작은 고유 벡터는 없어도 정보 손실이 거의 없습니다. 이 성질을 이용하면 얼굴 이미지처럼 300×300 행렬에서 고유값이 큰 12개의 고유 벡터만 남기고 나머지를 제거해도 얼굴의 윤곽이 충분히 복원됩니다. 유튜브 영상이 10GB에서 20MB로 압축되는 원리도 이것과 거의 동일한 메커니즘입니다.
기계학습에서는 이 성질을 활용해 중요하지 않은 특징 차원을 제거하고 모델의 입력 차원을 줄일 수 있습니다. 고유값이 작은 축들을 제거하면 정보는 유지하면서 차원의 저주를 피할 수 있습니다.
단점이 하나 있는데, 고유값 분해는 입력 행렬이 반드시 정사각 행렬이어야 합니다. 실제로 우리가 다루는 데이터는 샘플 수와 특징 수가 같은 경우가 거의 없어서 적용하기 어렵습니다.

특잇값 분해 (SVD)
고유값 분해의 이런 제약을 해결하기 위해 등장한 것이 특잇값 분해(Singular Value Decomposition)입니다.
아이디어는 간단합니다. A가 정사각 행렬이 아니어도 AA^T와 A^TA는 각각 정사각 행렬이 됩니다. 그리고 A의 고유 벡터와 AA^T의 고유 벡터는 동일하고, 고유값만 제곱이 된다는 재밌는 성질이 있어요. 이 성질을 이용해서 직사각 행렬에도 고유값 분해와 유사한 방식으로 행렬을 분해할 수 있습니다. 이때 고유값은 특잇값(Singular Value)이라는 이름으로 바꿔 부릅니다.

확률 변수와 확률 분포
기계학습이 다루는 데이터는 굉장히 불확실합니다. 노이즈도 많고, 사람이 레이블링할 때 실수도 생기고, 의사 결정 자체도 확률적이에요. 같은 조건인데 어떤 날은 맥도날드에 가고 어떤 날은 학관에 가는 것처럼요.
확률 변수(Random Variable)는 값이 확률에 기반해서 결정되는 변수입니다. 이 확률 변수가 가질 수 있는 값의 집합이 정의역이 되고, 각 값이 발생할 확률을 계산하는 함수가 확률 분포입니다.
값이 이산적이면 확률 질량 함수(PMF), 연속적이면 확률 밀도 함수(PDF)를 사용합니다. 연속 확률의 경우 "키가 정확히 175cm일 확률"처럼 한 점에서의 확률은 의미가 없고, "175cm에서 180cm 사이일 확률"처럼 구간을 줘야 합니다. 그 구간의 면적이 곧 확률이 되는 거죠.
확률의 곱규칙과 합규칙
두 확률 변수가 동시에 발생할 확률을 결합 확률이라고 하고, 이를 계산할 때 곱규칙을 씁니다.
P(X, Y) = P(Y) × P(X|Y)
1번 공을 뽑고 그 병에서 흰 공을 뽑을 확률을 구한다면, 1번 공이 뽑힐 확률 × 1번 병에서 흰 공이 나올 확률을 곱하면 됩니다. 두 사건이 독립이라면 조건부 확률 없이 그냥 각각의 확률을 곱하면 됩니다.
합규칙은 확률 변수의 개수를 줄이고 싶을 때 씁니다. P(X, Y)로부터 P(X)만 얻고 싶다면 Y 방향으로 적분하거나 합산해서 Y를 날려버리는 거예요. 이 과정을 주변화(Marginalization)라고 합니다.
베이즈 정리
곱규칙을 변형하면 베이즈 정리가 유도됩니다.
P(Y|X) = P(X|Y) × P(Y) / P(X)
이 식이 강력한 이유는 직접 풀기 어려운 역 문제를 쉽게 바꿔주기 때문입니다. "흰 공이 나왔는데 1번 병에서 나왔을 확률"은 직접 계산하기 어렵지만, 베이즈 정리를 쓰면 "1번 병을 선택하고 흰 공을 뽑을 확률"이라는 쉬운 문제로 변환됩니다.
기계학습도 같은 원리로 동작합니다. 키와 몸무게라는 특징 X를 보고 남자/여자라는 클래스 Y를 예측하는 것이 사후 확률 P(Y|X)이고, 모델은 내부적으로 이 확률을 계산해서 가장 높은 Y를 출력합니다.
사후 확률, 우도, 사전 확률
베이즈 정리를 기계학습 관점으로 해석하면 이렇습니다.
사후 확률(Posterior) P(Y|X)는 X를 관측한 후에 Y를 역으로 추론하는 확률입니다. 키 176cm를 보고 남자/여자일 확률을 추론하는 것이 여기에 해당합니다.
우도(Likelihood) P(X|Y)는 Y 클래스 안에서 X가 발생할 확률입니다. 남자일 때 키가 176cm일 확률, 여자일 때 키가 176cm일 확률처럼 각 클래스별 분포에서 구합니다.
사전 확률(Prior) P(Y)는 전체 샘플에서 각 클래스가 차지하는 비율입니다. 사전 확률은 우도만큼이나 중요합니다. 아무리 키가 176cm여도 이화여대에서 수집한 데이터라면 여자일 확률이 압도적으로 높겠죠. 사전 확률이 우도를 압도하는 순간이 있는 거예요.
최대 우도 추정 (MLE)
최대 우도 추정(Maximum Likelihood Estimator)은 관측된 데이터가 가장 잘 발생할 수 있도록 파라미터를 추정하는 방법입니다.
찌그러진 동전을 5번 던졌더니 앞면이 3번 나왔다면, 앞면이 나올 확률 θ는 얼마일까요? 직관적으로 3/5 = 0.6이라고 답하게 되는데, 이게 바로 MLE 관점에서의 풀이입니다. 관측된 결과가 나올 확률을 수식으로 쓰면 θ³(1-θ)²이 되고, 이 식을 최대화하는 θ를 미분을 통해 구하면 0.6이 나옵니다.
그런데 확률 값은 0과 1 사이라서 여러 개를 계속 곱하면 컴퓨터가 표현할 수 없을 만큼 0에 가까워집니다. 이 수치 문제를 피하기 위해 로그를 씌운 최대 로그 우도 추정을 실제로 사용합니다. 로그는 단조 증가 함수이기 때문에, 로그를 씌워도 최댓값을 내는 θ는 바뀌지 않습니다. 곱셈이 덧셈으로 바뀌어서 수치 문제도 사라지고요.
가우시안 분포와 공분산 행렬
가장 많이 쓰는 분포는 가우시안(정규) 분포입니다. 1차원에서는 평균과 분산 두 파라미터로 종 모양의 분포를 완벽하게 표현합니다. 1억 명의 키 데이터가 있어도 평균과 분산 두 값만 저장하면 분포 전체를 표현할 수 있다는 게 정말 대단한 거죠.

D차원 특징 벡터일 때는 평균 벡터와 공분산 행렬을 사용합니다. 공분산 행렬의 대각 원소들은 각 특징의 분산값을 나타내고, 비대각 원소들은 두 특징 사이의 상관관계를 나타냅니다. 키와 몸무게처럼 함께 증가하는 관계면 양수, 키가 커질수록 어떤 값이 감소하는 관계면 음수, 아무 관계가 없으면 0이 됩니다.
공분산 행렬은 대칭 행렬입니다. 키와 몸무게의 상관관계는 몸무게와 키의 상관관계와 같으니까요.

베르누이 분포와 이항 분포
베르누이 분포는 성공/실패처럼 두 가지 상태에 대한 확률을 표현합니다. 동전 한 번 던지기, 환자 검사 결과가 양성/음성인 경우 등에 사용합니다.
이항 분포는 베르누이 실험을 n번 반복할 때의 분포입니다. 동전을 100번 던져서 앞면이 60번 나올 확률처럼요. 재밌는 건 이 이항 분포의 모양이 가우시안을 따른다는 겁니다.
중심극한정리
이항 분포가 가우시안처럼 생기는 이유가 중심극한정리입니다. 서로 다른 분포 10개 이상을 합치면 결국 가우시안에 가까운 모양이 된다는 정리예요. 그래서 자연에서 관찰되는 수많은 현상들, 키, 성적, 오렌지 크기 등이 가우시안 분포를 따르는 겁니다.
정보 이론과 엔트로피
정보 이론에서 '정보량'은 확률과 반비례합니다. 발생 확률이 낮은 사건일수록 정보량이 크고, 뻔한 사건일수록 정보량이 작습니다. 고비 사막에 눈이 왔다는 건 엄청난 정보지만, 대관령에 눈이 왔다는 건 별로 놀랍지 않은 것처럼요. 수식으로는 -log P(x)로 나타냅니다.
엔트로피(Entropy)는 이 정보량의 평균값입니다. 하지만 단순한 평균을 넘어서 불확실성을 나타낸다는 더 깊은 의미를 가집니다. 4개 팀이 모두 25% 확률로 이길 것 같다면 어느 팀이 이길지 확신하기 어렵고, 이것이 엔트로피가 높은 상태입니다. 반대로 한 팀의 승률이 97%라면 거의 확신할 수 있고, 이것이 엔트로피가 낮은 상태입니다.
균일 분포(Uniform Distribution)일 때 엔트로피가 가장 높고, 한 사건의 확률이 100%에 가까울수록 엔트로피는 0에 가까워집니다.
교차 엔트로피와 KL 다이버전스
두 분포 P와 Q가 있을 때, 두 분포 사이의 거리를 측정하는 것이 KL 다이버전스입니다. 교차 엔트로피를 전개하면 P에 대한 엔트로피와 KL 다이버전스로 분해됩니다.
기계학습에서 P는 정답 레이블의 분포, Q는 모델이 예측한 분포입니다. P의 엔트로피는 데이터에서 오는 상수라서 학습으로 바꿀 수 없습니다. 결국 교차 엔트로피를 손실 함수로 걸면 KL 다이버전스, 즉 예측 분포 Q가 정답 분포 P에 가까워지도록 모델이 학습됩니다.
KL 다이버전스에서 P와 Q의 순서를 바꾸면 안 됩니다. Q에 0이 있으면 log(0)이 되어 마이너스 무한대로 가버리는 심각한 수치 문제가 생기거든요. 정답 레이블은 '남자 = 1, 여자 = 0'처럼 0이 빈번히 존재하기 때문에, 이쪽이 로그 안에 들어가면 안 됩니다.

기계학습에서의 최적화
순수 수학에서의 최적화는 수식을 분석해서 최적해를 정확히 찾는 것이지만, 기계학습에서의 최적화는 근본적으로 다릅니다. 우리는 최적화를 열심히 하지만 거의 100% 확률로 진짜 최적해를 찾지 못합니다.
이유가 두 가지 있는데, 첫째로 최적화는 훈련 집합으로 하지만 실제 성능은 테스트 집합으로 재기 때문에 대상이 불일치합니다. 둘째로 학습에 쓰는 손실 함수(MSE 등)와 실제로 측정하는 성능 지표(정확도)가 다릅니다. 정확도는 미분이 안 되기 때문에 미분 가능한 손실 함수를 대리자로 쓰는 거예요. 결국 기계학습은 대리자로 대리자를 최적화하는 셈입니다.

낱낱 탐색과 무작위 탐색
가장 단순한 방법은 파라미터 구간을 격자로 나눠서 일일이 다 확인하는 낱낱 탐색(Exhaustive Search)입니다. 파라미터 하나면 40번 탐색으로 충분하지만, 파라미터가 12개면 40의 12승번을 탐색해야 합니다. 차원의 저주로 인해 현실적으로 불가능합니다.
무작위 탐색(Random Search)은 구간에서 랜덤하게 값을 뽑아서 손실을 계산하고, 더 좋은 값이 나오면 갱신하는 방식을 반복합니다. 아무 전략이 없어 보이지만 놀랍게도 낱낱 탐색보다 훨씬 성능이 좋습니다. 오래 돌릴수록 더 좋은 해가 나와요. 힘을 뺀 게 오히려 더 좋은 결과를 내는 재밌는 사례입니다.
경사 하강법
기계학습이 실제로 사용하는 방법은 미분을 활용한 경사 하강법입니다. 미분값에는 두 가지 정보가 담겨 있는데, 방향(부호)과 크기입니다. 핵심은 방향입니다. 기울기의 반대 방향으로 파라미터를 조금씩 업데이트하면 손실이 반드시 감소합니다.
θ = θ - ρ × ∇L(θ)
여기서 ρ는 학습률(Learning Rate)이라는 하이퍼파라미터입니다. 그래디언트 값 자체는 너무 크기 때문에 적절하게 스케일링하는 역할을 하고, 보통 10⁻² ~ 10⁻⁴ 사이의 값을 씁니다.
경사 하강법의 단점은 그리디(Greedy)하다는 것입니다. 지금 당장 기울기가 감소하는 방향으로만 가기 때문에 글로벌 최솟값이 아닌 로컬 최솟값에 빠질 수 있습니다. 그런데 딥러닝 연구에 따르면, 파라미터 수가 매우 많을 경우 어디서 수렴해도 글로벌 최솟값과 큰 차이가 없다는 것이 증명되어 있습니다. 차원의 저주가 오히려 딥러닝에서는 축복이 되는 거죠.
Gradient와 편미분
모델에는 W와 b처럼 여러 파라미터가 있으므로, 각 파라미터에 대해 편미분을 합니다. 각 파라미터에 대한 편미분 값들을 묶어놓은 벡터가 그래디언트(Gradient)이고, 이걸 하나 갖고 있으면 모든 파라미터를 한 번에 업데이트할 수 있습니다.
연쇄 법칙 (Chain Rule)
딥러닝은 여러 레이어가 합성 함수 형태로 연결되어 있습니다. 이런 합성 함수를 미분할 때 연쇄 법칙을 사용합니다. 즉, '겉미분 × 속미분'을 반복해서 곱해주는 방식이죠.
각 함수에서 출력을 입력으로 미분한 값을 로컬 그래디언트(Local Gradient)라고 합니다. 맨 뒤에서부터 로컬 그래디언트를 계산하면서 앞으로 전파하는 것이 역전파(Backpropagation)입니다. 이것이 딥 뉴럴 네트워크 학습의 핵심 메커니즘입니다.

야코비안 행렬
입력이 여러 개, 출력이 여러 개인 함수가 있을 때 모든 편미분 값을 행렬로 모아놓은 것이 야코비안 행렬입니다. 여러 레이어에서 발생하는 그래디언트를 한 행렬로 표현한 것으로, 이걸 알고 있으면 모든 가중치를 한 번에 업데이트할 수 있습니다.
헤시안 행렬
헤시안 행렬은 2차 편도함수로 이루어진 행렬입니다. 대각 원소들은 각 파라미터의 2차 미분값(곡률)을 나타내고, 비대각 원소들은 두 파라미터를 동시에 미분한 연합 미분값을 나타냅니다.
헤시안 행렬이 유용한 이유는 이 연합 미분값 덕분입니다. 1차 그래디언트만 사용하면 두 축의 기울기 차이가 클 때 엉뚱한 방향으로 크게 업데이트되는 오버슈팅이 발생하기 쉬운데, 헤시안 행렬을 활용하면 더 정확한 방향으로 훨씬 빠르게 수렴합니다.
또한 헤시안의 대각 원소, 즉 각 파라미터의 곡률 값은 그 파라미터의 중요도를 나타냅니다. 값이 크면 해당 파라미터를 제거했을 때 손실이 크게 변한다는 뜻이니까, 중요한 파라미터를 골라낼 때도 활용됩니다.
단점은 계산량이 어마어마하다는 것입니다. 그래서 일반적으로 헤시안을 근사화한 방법들을 주로 사용합니다. 연구를 하다 보면 헤시안 행렬을 활용한 논문이 꽤 자주 나오니까 잘 기억해두면 유용합니다.

Batch GD, SGD, 미니 배치
경사 하강법은 업데이트할 때 몇 개의 샘플을 쓰느냐에 따라 종류가 나뉩니다.
배치 경사 하강법(Batch GD)은 전체 샘플의 그래디언트를 평균 내서 한 번 업데이트합니다. 안정적이지만 계산량이 많고 수렴이 느립니다.
확률적 경사 하강법(SGD)은 샘플 하나를 뽑아서 즉시 업데이트합니다. 빠르지만 노이즈가 많아서 업데이트가 불안정합니다.
미니 배치(Mini-Batch)는 두 방법의 장점을 결합한 방식입니다. 전체 데이터를 128개 또는 256개씩 묶어서 그 묶음의 그래디언트를 평균 내서 업데이트합니다. 통계적으로 66개 이상의 샘플이면 전체 데이터의 통계 특성과 비슷해지기 때문에, 미니 배치 크기를 128 이상으로 설정하면 안정성과 속도를 동시에 얻을 수 있습니다.
한 가지 주의할 점은 매 에폭(epoch)마다 샘플 순서를 섞어줘야 한다는 겁니다. 순서가 고정되면 모델이 순서를 외워버려서 학습이 더 이상 진행되지 않는 문제가 생깁니다.
'학교공부 > 딥러닝' 카테고리의 다른 글
| [딥러닝] 딥러닝 최적화(1) (0) | 2026.03.24 |
|---|---|
| [딥러닝] 다층 퍼셉트론 (0) | 2026.03.05 |
| [딥러닝] 퍼셉트론 (0) | 2026.03.05 |
| [딥러닝] 기계학습과 수학(1) (0) | 2026.03.04 |
| 딥러닝 [수정중] (0) | 2025.12.12 |