머신러닝과 딥러닝으로 처음부터 공부해보고 싶어서 신청한 혼공학습단 14기

밑바닥부터 초심자 느낌으로 꼼꼼히 공부해보고 싶었는데,
혼공학습단 14기 활동에 참여하려면 "혼자 공부하는 머신러닝 + 딥러닝" 책이 필요했다.

 

[IT 서적] AI를 독학하는 가장 쉬운 방법 '혼자 공부하는 머신러닝 + 딥러닝'

요즘 인기가 많은 인공지능의 대표적인 기술, 머신러닝과 딥러닝 시중에 인공지능 관련 서적은 많지만 어떤...

blog.naver.com

 

하지만 운이 좋게도 '나는 리뷰어다' 활동을 통해서 이미 책을 받은 적이 있어서 마음가짐만 준비한다면 참여하는 데에 문제가 없었다.

 

 

 

정확히 두달 전이었던 2025년 6월 25일
문득 메일을 받았는데 내 바램과 목표를 알아주었던 것인지 혼공학습단 14기에 선정되었다.

 

 

혼공머신으로 참여하였는데, 1주차부터 6주차까지 매주 정해진 진도를 공부하고 기본 숙제와 추가 숙제를 수행하는 것이 메인 미션이었다.
이미 한번 공부해본 경험이 있었기에, 숙제 내용을 보고 꾸준히 한다면 부담감 없이 숙제를 할 수 있겠다는 자신감이 있었다.

 

사람마다 코딩 공부의 방식의 차이는 있겠지만, 이론과 실습이 병행되어야 제대로된 공부를 했다고 생각한다.
혼공학습단의 장점은 블로그 포스팅에 정리하면서 혼자서 이해한 내용을 설명할 수 있는 기회를 가지게 된다.

또한 예제 코드를 단순히 따라 치지 않고, 이해한 내용을 바탕으로 직접 코드 구현을 해볼 수 있었던 것도 정말 유익했다고 생각한다.
특히 평소에 로컬 환경에서 구현해서 사용하던 사람이라, 코랩을 써보니 라이브러리 문제가 없는 것이 너무 편하고 좋았다.

 

 

혼공학습단의 또 다른 장점은 매주 진행한 숙제를 바탕으로 혼공족장님께서 우수 혼공족에게 포상을 준다는 것이다.
심지어 4주차를 완료하고 나면, 고생했다는 의미로 과제 완료자에게 깜짝 선물까지 챙겨주시는 세심함에 공부하고 싶은 욕구가 더 생겼다.

열심히 하다보니 5주차에는 우수 혼공족으로 선정되었는데, 혼공학습단 덕분에 맛있는 간식을 더 먹을 수 있었다.
혼자 공부하면서 지식을 쌓는데 간식도 주고, 혼공족장의 격려 메세지까지 받을 수 있는 건 흔한 기회가 아니라 생각했다.

 

 

혼공학습단을 통해서 진행한 진도 이외에 남은 부분이 많지 않아서 8월 중에 한권을 마무리 지으려고 한다.
6주라는 기간동안 책 한 권을 꾸준하게 본다는 것은 의지가 필요한 일처럼 보이지만, 생각보다 어려운 일은 아니었다.

코딩 공부를 꾸준하게 하면서 응원 메세지와 간식까지 받으면서 재밌게 공부하고 싶다면, 혼공학습단 참여를 강력하게 추천하고 싶다.
사실 혼공학습단 15기도 모집 예정이라고 하는데, 다음 기수에도 꼭 신청하여 다른 책을 완독할 예정이다.

 

인공 신경망의 구조

생물학적 뉴런이 수상 돌기로부터 신호를 받아 세포체에 모으듯이, 인공 신경망도 입력 데이터가 가중치에 따라 계산된 후 출력된다.
인공신경망은 크게 입력층 (Input Layer), 가중치 (Weight), 그리고 출력층 (Output Layer)로 구성된다.

  1. 입력층 (Input Layer)
    • 외부에서 들어오는 데이터를 받는 부분을 의미한다
      예를 들어, 이미지 분류 문제의 경우, 한 픽셀 값이 하나의 입력 뉴런이 된다
    • 입력층에 있는 각 뉴런은 데이터를 그대로 다음 단계 (은닉층 또는 출력층)으로 전달하지 않고, 가중치와 곱해져 전달된다.
  2. 은닉층 (Hidden Layer)
    • 입력을 가중치와 활성화 함수를 거쳐 변환하는 층
  3. 가중치 (Weight)
    • 입력 신호의 중요도를 나타내는 값이다
    • 가중치는 학습 과정에서 조정되는 파라미터이며, 어떤 입력이 결과에 더 큰 영향을 미칠지를 결정한다.
      예를 들어, 이미지의 특정 feature (색상, 엣지, 패턴 등)이 결과에 중요한 영향을 미친다면, 그 입력의 가중치가 크게 조정된다.
  4. 출력층 (Output Layer)
    • 최종 결과를 내놓는 부분이다
    • 예측 값이 확률 형태 (예시: softmax 함수)일 수도 있고, 연속적인 값 (예시: 회귀 문제)일수도 있다
      고양이 vs 개 분류 문제에서는 출력층의 각 뉴런은 각각 "고양이일 확률"과 "개일 확률"을 나타낸다.

 

인공 신경망 구현을 위한 케라스 핵심 패키지와 함수

  • 모델 구성 (keras.models)
    • 입력층 → 은닉층 → 출력층으로 정의
    • 주요 클래스 및 함수
      1. Sequential: 층을 순차적으로 쌓아 만드는 가장 기본적인 모델로서, 신경망 모델에 전달할 층을 파이썬 리스트로 전달한다.
      2. Model: 함수형 API로 복잡한 구조를 만들 때 사용한다
      3. load_model, save: 모델 저장/불러오기
  • Input
    • 신경망의 입력 데이터 형태 (shape)를 정의하는 층
    • Sequential 모델에서는 보통 Dense(..., input_shape=(특징수, )) 형태로 입력 차원을 지정한다.
    • 함수형 API에서는 Input(shape=(특징수, )) 을 명시적으로 사용한다.
from keras.layers import Input, Dense
inputs = Input(shape=(100,))   # 입력 차원: 100
  1.  
  • Dense
    • 완전 연결층 (Fully Connected Layer)
    • 모든 입력 뉴련이 모든 출력 뉴런과 연결된다.
    • 주요 인자
      1. units: 출력 뉴런 개수
      2. activation: 활성화 함수 (예시: relu, sigmoid, softmax 등)
      3. input_shape: 첫 층에서 입력 데이터 형태 지정
Dense(64, activation='relu', input_shape=(100,))
  • Sequential
    • 층을 순차적으로 쌓는 방식으로 모델을 만드는 클래스
    • 가장 직관적이고 단순한 인공 신경망 모델을 구성하는 방법이다.
from keras.models import Sequential
from keras.layers import Dense

model = Sequential([
    Dense(64, activation='relu', input_shape=(100,)),
    Dense(10, activation='softmax')
])
  • compile()
    • 모델을 학습할 준비를 하는 단계
    • 최적화 알고리즘, 손실 함수, 평가 지표를 지정한다.
      • optimizer: Adam, SGD, RMSprop 등
      • loss: crossentropy (분류), mse (회귀) 등
      • metrics: 정확도, 오차율 등
  • fit()
    • 실제로 모델을 학습시키는 함수
    • 입력 데이터와 정답 레이블을 주면 지정한 epoch 동안 학습한다.
    • 주요 인자 
      • x, y: 학습 데이터와 레이블
      • epochs: 전체 데이터셋을 몇 번 반복 학습할지 정함
      • batch_size: 한 번에 학습할 데이터 묶음 크기
      • validation_data: 검증 데이터 (과적합 방지)
model.fit(x_train, y_train, epochs=10, batch_size=32,
          validation_data=(x_val, y_val))
  • evaluate()
    • 학습된 모델을 테스트 데이터에 대해 평가한다
    • compile() 에서 지정한 손실 함수 값과 지표 (예시: 정확도)를 반환한다
loss, acc = model.evaluate(x_test, y_test)
print("테스트 정확도:", acc)

 

 

혼공학습단 14기 - 6주차 과제 (확인 문제 풀이)

  1. 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때, 필요한 모델 파라미터의 개수는 몇 개일까요?
    • 정답: 3번 (1,010개)
      • 가중치: 100 x 10 = 1,000개
      • 편향: 10개
      • 총합: 1,000개 + 10개 = 1,010개
  2. 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?
    • 정답: 2번 ('sigmoid')
      • 'binary': 활성화 함수가 아님
      • 'softmax': 다중 클래스에서 단일 라벨에 표준으로 활용함
      • 'relu': [0, ∞) 범위로 확률 (0 ~ 1)로 해석이 불가함, 은닉층에서 비선형성을 주기 위해서 사용함
  3. 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?
    • 정답: 4번 (compile())
  4. 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때,
    케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은 무엇인가요?
    • 정답: 1번 ('sparse_categorical_crossentropy')
      • 'categorical_crossentropy': 원-핫 레이블을 전제로 함
      • 'binary_crossentropy': 이진 분류 또는 멀티라벨 분류에 맞는 손실 함수
      • 'mean_square_error': 회귀에 적절하며, 분류에 사용하기에 부적절한 손실 함수

 

K-평균 (K-Means)은 데이터를 K개의 그룹 (클러스터)로 나누는 비지도 학습 (unsupervised learning) 알고리즘이다.
이름에서 알 수 있듯이, 각 클러스터의 중심 (centroid)을 평균 (mean)으로 정의하고, 데이터와 중심 사이의 거리를 최소화하는 방식이다.

주요 특징

  • 지도학습이 아니라서 정답 레이블이 필요 없음
  • 거리 기반 클러스터링 (일반적으로 유클리드 거리 사용함)
  • 빠르고 직관적이지만, 초기값과 K값 설정에 따라 결과가 달라질 수 있음

 

동작 원리

  1. K값 설정: 몇 개의 클러스터로 나눌지 (K 값)을 정한다
  2. 초기 중심점 선택: 데이터 중 무작위로 K개의 점을 선택해 초기 클러스터 중심을 설정한다
  3. 데이터 할당: 각 데이터 포인트를 가장 가까운 중심점에 할당한다
  4. 중심점 업데이트: 각 클러스터에 속한 데이터들의 평균 위치를 계산하여 새로운 중심점으로 갱신한다
  5. 수렴 조건 확인: 중심점의 위치가 더 이상 변하지 않거나 변화량이 매우 작아질 때까지 3 ~ 4단계를 반복한다

 

장점과 단점

장점

  • 간단히 구현할 수 있고 실행 속도가 빠름
  • 대용량 데이터에도 적용 가능
  • 차원이 낮을 때 시각화가 쉬움

단점

  • K 값을 미리 알아야 함
  • 초기 중심점 선택에 따라 결과가 달라짐
  • 원형 (구형) 클러스터가 아닌 경우 성능 저하
  • 이상치 (outlier)에 민감함

 

결론

K-평균 알고리즘은 간단하지만 강력한 비지도 학습 기법으로 다양한 분야에서 활용되고 있다.
하지만, K 값 선택과 초기값 설정, 그리고 데이터의 분포 특성을 고려하여 사용하여야 한다.
더 나은 성능을 위해서는 이상치를 제거하거나, 표준화 같은 전처리 과정을 함께 사용하는 것이 좋다.

머신러닝 모델을 학습하다 보면, 우리가 만든 모델이 진짜 잘 작동하는지, 아니면 우연히 훈련 데이터에 잘 맞는 것인지 궁금할 때가 많다.
이때 사용하는 가장 대표적인 기법이 바로 교차 검증 (Cross Validation)이다.

 

교차 검증이란?

교차 검증이란 전체 데이터를 여러 조각으로 나눈 뒤,
여러 번 모델을 훈련하고 평가하여 평균 성능을 측정하는 방식이다.
가장 널리 쓰이는 방식은 K-겹 교차 검증 (K-Fold Cross Validation)이다.

  1. K-겹 교차 검증은 데이터를 K개의 균등한 덩어리로 나눈다.
  2. K번 반복i 번째 fold를 검증용 데이터 (Validation Set)으로 사용하고,
    나머지 k-1개 fold를 학습용 데이터 (Training Set)으로 사용한다.
  3. 각 반복의 성능을 기록하고, 평균 성능을 계산하여 모델을 평가한다.

예를 들어, 5-fold라고 하면 전체 데이터를 5등분으로 나누고, 5번 반복하여 모델을 평가하는 것이다.

5-Fold Cross Validation

 

교차 검증이 중요한 이유는?

단일 분할 방식의 문제

보통은 데이터를 훈련/검증으로 나누고 성능을 평가하지만 여러 가지 문제가 있다.
운에 따라 성능이 달라질 수 있으며, 데이터가 적을수록 분할에 민감해지며, 과대적합 (Overfitting)을 알아차리기 어렵다.

교차 검증의 장점

  • 모든 데이터를 한 번씩 검증에 사용해볼 수 있으므로 성능 신뢰도가 상승된다.
  • 일반화 성능에 대한 더 정확한 추정이 가능해진다.
  • 과적합 방지에 도움이 된다.

 

 

"선형 회귀로 분류 문제를 풀고 싶다면, 로지스틱 회귀를 보아라"

로지스틱 회귀 (logistic regression)은 분류 문제, 특히 이진 분류 (binary classification) 문제를 해결하기 위한 대표적인 지도학습 알고리즘이다. 이름에 회귀라는 단어가 붙었지만, 실제로는 분류에 사용된다. 이 알고리즘은 선형 회귀와 동일하게 선형 방정식을 학습하여 연속적인 값을 예측한다.

하지만 이진 분류 문제에서는 결과가 0 또는 1 같은 범주형 값이어야 하기에, 선형 회귀를 사용하면 예측 값이 0보다 작거나 1보다 커질 수 있으며, 확률 해석이 불가능할 수 있다. 이를 위해서는 출력값이 0과 1 사이인 함수가 필요하며, 로지스틱 회귀에는 시그모이드 함수 (Sigmoid Function)를 활용한다.

 

시그모이드 함수 (Sigmoid Function)

시그모이드 함수는 실수 값을 입력받아, 0과 1사이의 확률 값으로 변환한다.

import numpy as np
import matplotlib.pyplot as plt

z = np.arange(-5, 5, 0.1)
phi = 1 / (1 + np.exp(-z))
plt.plot(z, phi)
plt.xlabel('z')
plt.ylabel('phi')
plt.title('Sigmoid Function', fontweight = 'bold')
plt.show()

 

+ Recent posts