WjExplor Story

1-8. 머신러닝 기본기_2025.10.14 본문

AI 엔지니어 부트캠프/파이썬 데이터 분석 기초와 머신 러닝 기초

1-8. 머신러닝 기본기_2025.10.14

더블유제이플로어 2025. 10. 14. 22:36

1-8: 머신러닝 기본기 학습 (수학 기반)

1. 머신러닝과 수학: 왜 필요할까?

  • 결론부터: 당장 딥러닝 앱을 만드는 데 수학이 필수적인 것은 아니며, GPT와 같은 도구를 활용해 많은 부분을 해결할 수 있습니다. 수학 때문에 이 분야를 포기하는 것은 추천하지 않습니다.
  • 하지만, 수학을 알면 훨씬 이득입니다:
    • 딥러닝 이론의 이해도가 달라집니다. (e.g., 경사하강법)
    • 논문을 읽고 새로운 기술을 습득할 때 깊이 있는 이해가 가능합니다.
    • 모델의 작동 방식을 이해하고 문제 해결 능력을 키울 수 있습니다.

학습 Tip: 경사하강법과 같은 어려운 개념은 한 번에 이해하기 어려울 수 있습니다. 시간을 가지고 여러 자료(강의, 유튜브 등)를 반복해서 보는 것을 추천합니다.


2. AI, 머신러닝, 딥러닝의 관계

  • AI (Artificial Intelligence, 인공지능): 가장 넓은 개념. 인간의 지능을 모방하는 모든 기술을 의미합니다. (e.g., 정해진 규칙대로 움직이는 계산기)
  • 머신러닝 (Machine Learning, 기계학습): AI의 한 분야. 컴퓨터가 데이터로부터 스스로 규칙을 학습하는 기술입니다.
  • 딥러닝 (Deep Learning): 머신러닝의 한 분야. 인간의 뇌 신경망(Neural Network) 구조를 모방하여, 여러 층(Layer)의 신경망을 깊게 쌓아 학습하는 방식입니다.

질문: 챗GPT는 머신러닝일까, 딥러닝일까?
답변: 챗GPT는 딥러닝 모델이며, 딥러닝은 머신러닝에 포함되므로 머신러닝이기도 합니다.

퍼셉트론(Perceptron): 인공 신경망의 시작

인간의 뇌 신경세포(뉴런)가 전기 신호를 주고받는 과정을 수학적으로 단순하게 모델링한 것입니다.

  • 여러 입력값(x1, x2, ...)을 받습니다.
  • 각 입력값에 고유한 가중치(weight, w1, w2, ...)가 곱해집니다. (신호의 중요도를 조절)
  • 모든 가중치가 적용된 입력값들이 합쳐져 특정 임계값을 넘으면, 결과(e.g., 1)를 출력하고 넘지 않으면 다른 결과(e.g., 0)를 출력합니다.
  • 이 가중치(w)와 편향(b) 같은 값들을 파라미터(Parameter)라고 부르며, 딥러닝 모델의 크기를 가늠하는 척도가 됩니다. (e.g., GPT-4의 파라미터는 약 1조 개로 추정)

3. 머신러닝은 언제 사용할까?

주요 사용 분야

  • 이미지 인식, 음성 인식, 자연어 처리, 금융 사기 탐지 등
  • 공통점: "규칙 기반(Rule-based) 방식으로 해결하기 매우 복잡하고 예외 상황이 많은 문제"

예시: '개'와 '머핀' 이미지 구분
단순히 if 색상 == '갈색' 과 같은 규칙으로는 머핀처럼 생긴 강아지나, 강아지처럼 생긴 머핀을 구분하기 어렵습니다. 머신러닝은 수많은 '개'와 '머핀' 사진 데이터를 보고 스스로 구분하는 특징(규칙)을 학습합니다.

사용하지 말아야 할 경우

  • 센서로 사람 유무를 감지하는 것처럼, 더 간단하고 효율적인 해결책이 있을 때
  • 굳이 머신러닝을 쓰면 시스템이 무거워지고 비용이 증가하여 비효율적일 수 있습니다. (오히려 감점 요인!)

4. 머신러닝의 주요 장르

구분 지도 학습 (Supervised) 비지도 학습 (Unsupervised) 강화 학습 (Reinforcement)
핵심 정답(Label)이 있는 데이터로 학습 정답이 없는 데이터로 학습 보상(Reward)을 통해 학습
데이터 예시 (이미지, '개'), (메일 내용, '스팸') 고객 구매 내역, 식물 특징 데이터 게임 환경, 로봇 시뮬레이션
목표 데이터(X)와 정답(Y)의 관계를 학습하여 예측 데이터 내의 숨겨진 구조나 패턴 발견 보상을 최대로 받는 최적의 행동 방식 학습
주요 기법 분류(Classification), 회귀(Regression) 군집화(Clustering), 차원 축소 Q-러닝, 정책 경사
대표 예시 스팸 메일 필터, 주택 가격 예측 고객 그룹 분류, 이상 탐지 알파고, 자율 주행 드론

4.1. 지도 학습: 분류 vs 회귀

지도 학습은 예측하려는 값의 종류에 따라 분류회귀로 나뉩니다.

특징 분류 (Classification) 회귀 (Regression)
예측 대상 이산적인 값 (카테고리) 연속적인 값 (수치)
예시 스팸/정상, 개/고양이/새, A/B/C 등급 주택 가격, 내일 강수량, 학생의 키
결과 각 클래스에 속할 확률을 계산 후, 가장 높은 확률의 클래스 선택 특정 수치를 직접 예측
손실 함수 크로스 엔트로피 (Cross-Entropy) MSE, MAE
평가 방식 "정확히 맞혔는가?" (정확도, F1-score 등) "정답에 얼마나 가깝게 예측했는가?" (오차 기반)

분류 vs 회귀 구분 퀴즈 (해설 포함)

  • Q. 가격 예측은?
    • A. 회귀. 가격은 1000원, 1000.5원 등 연속적인 수치로 표현됩니다.
  • Q. 내일 주식 가격이 '오를지/떨어질지' 예측은?
    • A. 분류. '오름', '떨어짐' 이라는 2개의 정해진 카테고리 중 하나를 고르는 문제입니다.
  • Q. 얼굴 사진으로 '나이'를 예측하는 것은?
    • A. 회귀. 나이는 25세, 25.1세, 25.2세처럼 연속된 값으로 볼 수 있기 때문입니다. (물론, '10대', '20대' 등으로 구간을 나누면 분류 문제가 될 수도 있지만, 보통은 회귀가 더 적합합니다.)
  • Q. ChatGPT 같은 언어 모델은?
    • A. 분류. 다음 단어를 예측할 때, 수만 개의 단어(카테고리) 중에서 가장 적절한 단어 하나를 고르는 분류 문제를 반복적으로 푸는 것입니다. 예를 들어 '안녕' 다음에 '하'가 올 확률, '가'가 올 확률 등을 모두 계산하여 가장 확률 높은 것을 선택합니다.
  • Q. 주식 가격이 '오를지/떨어질지/보합일지' 예측은?
    • A. 분류. '오름', '떨어짐', '보합' 이라는 3개의 정해진 카테고리 중 하나를 고르는 문제입니다.

5. Scikit-Learn을 활용한 머신러닝 파이프라인

현업에서는 대부분 scikit-learn 라이브러리를 사용해 머신러닝 모델을 만듭니다.

머신러닝 파이프라인 5단계

1. 데이터 분할 (Train / Validation / Test)

모델을 객관적으로 평가하기 위해 데이터를 나눕니다.

  • Train (훈련용, 약 60%): 모델 학습 (교과서)
  • Validation (검증용, 약 20%): 모델 성능 중간 점검 및 최적화 (모의고사)
  • Test (테스트용, 약 20%): 최종 모델의 성능을 딱 한 번 평가 (수능)

2. 데이터 전처리 (Preprocessing)

모델이 데이터를 잘 이해할 수 있도록 다듬는 과정입니다. (결측치 처리, 스케일링 등)

  • 스케일링(Scaling)이 필요한 이유: 키(170cm), 몸무게(60kg), 코 높이(4cm)처럼 변수 간 단위 차이가 크면, 모델이 단위가 큰 변수(키, 몸무게)에만 과도하게 집중할 수 있습니다. StandardScaler 등을 사용해 모든 변수의 단위를 비슷한 범위로 맞춰주어 동등한 조건에서 학습하게 합니다.

3. 모델 선택 및 하이퍼파라미터 탐색

  • 모델 선택: 풀려는 문제(분류/회귀)에 맞는 모델을 선택합니다. (e.g., Ridge)
  • 하이퍼파라미터(Hyperparameter): 모델의 성능을 조절하기 위해 사람이 직접 설정하는 값입니다. (e.g., 학습 속도, 규제 강도 alpha)
  • 파라미터(Parameter): 모델이 학습 과정에서 스스로 업데이트하는 값입니다. (e.g., 가중치 w, 편향 b)
  • GridSearchCV: 우리가 지정한 하이퍼파라미터 후보들을 모두 시험해보고, 최적의 조합을 자동으로 찾아주는 도구입니다.

4. 모델 평가

최적화된 모델이 얼마나 좋은 성능을 내는지 검증/테스트 데이터로 점수를 확인합니다. (e.g., RMSE, R²)

5. 모델 저장 및 활용

학습이 끝난 모델과 전처리 도구(스케일러)를 파일(.pkl)로 저장해두면, 나중에 재학습 없이 바로 불러와 예측에 사용할 수 있습니다.


6. 머신러닝을 위한 핵심 선형대수

6.1. 데이터의 표현: 스칼라, 벡터, 행렬, 텐서

  • 스칼라 (Scalar): 단일 숫자 (0차원). 예: 3.14
  • 벡터 (Vector): 숫자의 1차원 배열. 예: [1, 2, 3]
  • 행렬 (Matrix): 숫자의 2차원 배열 (직사각형). 예: [[1, 2], [3, 4]]
  • 텐서 (Tensor): 3차원 이상의 다차원 배열. 딥러닝에서 데이터를 다루는 기본 단위입니다. (e.g., 흑백 이미지 100장: (100, 28, 28))

혼동 주의: 배열의 차원(ndim) vs 벡터 공간의 차원

  • 배열의 차원 (프로그래밍): 데이터를 감싸는 괄호의 개수. np.array([1, 2, 3])는 1차원 배열(ndim=1).
  • 벡터 공간의 차원 (수학): 벡터를 표현하는 데 필요한 좌표축의 개수. [1, 2, 3]은 3개의 좌표(x, y, z)를 가지므로 3차원 공간  ) 의 벡터입니다.
    👉 결론: np.array([1, 2, 3])1차원 배열이지만, 3차원 공간의 벡터를 나타냅니다. 머신러닝에서는 주로 프로그래밍 관점의 '배열 차원'을 이야기합니다.

6.2. 행렬 곱 (Matrix Multiplication)

두 행렬 A와 B를 곱해 새로운 행렬 C를 만드는 연산입니다. Cij열 원소는 Ai번째 행벡터와 Bj번째 열벡터의 내적(Dot Product)으로 계산됩니다.

예시:


7. 벡터의 거리와 유사도

컴퓨터는 이미지, 텍스트 등의 데이터를 숫자로 이루어진 벡터로 변환하여 처리합니다. 따라서 두 벡터의 관계(거리, 유사도)를 계산하는 것은 "두 데이터가 얼마나 가깝거나 다른지"를 파악하는 핵심적인 방법입니다.

7.1. 유클리드 거리 (Euclidean Distance)

  • 정의: 두 점 사이의 가장 짧은 직선거리. 피타고라스 정리를 다차원으로 확장한 것입니다.
  • 수식:

강의 내용 수정 및 보충

"길이의 차를 더해서 루트 씌우면 된다" -> 부정확한 표현입니다.

정확한 설명: 각 차원(원소)별로 값의 차이를 제곱하고, 그 값들을 모두 더한 뒤, 마지막에 제곱근(루트)을 씌우는 것입니다.

"유클리드는 방향 정보를 가지고 있다" -> 잘못된 설명입니다.

정확한 설명: 유클리드 거리는 두 벡터(점)가 얼마나 멀리 떨어져 있는지를 나타내는 스칼라 값(거리의 크기)입니다. 여기에는 방향 정보가 포함되지 않습니다. 두 벡터가 정반대 방향을 가리키더라도, 원점에서의 거리가 같다면 두 벡터 사이의 유클리드 거리는 특정 값으로 계산될 뿐입니다.

7.2. 내적 (Dot Product)과 코사인 유사도 (Cosine Similarity)

  • 내적: 두 벡터의 각 원소를 곱한 뒤 모두 더한 값. 결과가 크면 "두 벡터의 방향이 비슷할 경향이 있다"고 해석할 수 있습니다.
  • 내적의 한계: 벡터의 크기(magnitude)에 영향을 받습니다. 방향이 같아도 벡터의 길이가 길면 내적 값은 무한정 커질 수 있어, 순수한 방향의 유사도를 비교하기 어렵습니다.
  • 코사인 유사도: 이 한계를 극복하기 위해, 각 벡터의 크기를 1로 정규화(normalize)한 뒤 내적을 계산하는 방법입니다. 즉, 벡터의 크기 영향을 제거하고 오직 방향의 유사성만을 측정합니다.

  • 결과 해석:
    • +1: 두 벡터가 완전히 같은 방향. (가장 유사)
    • 0: 두 벡터가 직각을 이룸. (관련성 없음)
    • -1: 두 벡터가 완전히 반대 방향. (가장 비유사)

궁금증 

Q. 차원이 똑같아야 비교할 수 있나요? 1차원과 3차원은 비교할 수 없나요?

A. 네, 비교할 수 없습니다. 반드시 차원이 같아야 합니다.

이유: 유클리드 거리, 코사인 유사도 같은 계산은 모두 두 벡터의 같은 인덱스(차원)에 있는 원소끼리 연산을 수행합니다. (p1q1, p2q2처럼) 만약 두 벡터의 차원(길이)이 다르면, 짝을 지어 계산할 원소가 없으므로 거나 유사도를 정의할 수 없습니다.

예시: '사랑'이라는 단어를 [0.8, 0.2, 0.5] (3차원) 벡터로 표현했다면, 유사도를 비교할 '우정'이라는 단어도 반드시 [0.7, 0.3, 0.6]처럼 똑같은 3차원 벡터로 표현되어야 합니다.