ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SKN Family AI 15기 6월 4주차 회고
    기록../SKN Family AI 15기 2025. 6. 30. 09:23

    ✍️이번주 회고

    전체 회고

    어느덧 6월이 다 지나가고 6월 마지막주다. 이번주부터 상당히 바빠질 예정인데, 정보처리 기사 시험이 바로 7월에 있다... 맙소사...! 한 개도 공부를 안 한 것 같은데... ㅠㅠ... 그래도 한 번 시험에 도전하는 것을 의의로 두고 최선을 다해 도전해야겠다. 분명히 필기할 때 본 게 분명한데 적으려고 하니 적히지 않는 이유는 무엇일까? 서술형이란게 참 그렇다... 

    Keep

    • 드디어 딥러닝 모델의 구현을 시작했다! 학부 시절 사용한 MNIST 데이터셋이 참 반갑다... ^_^ pytorch로 모델을 하나하나 구현해 가는 과정은 좀 지루하긴 한데(아무래도 전부 한 줄 한줄 구현하는 거다보니까?), 그래도 이런 코드 한 줄 한 줄이 모여서 컴퓨터가 손글씨를 인식할 수 있게 된다니 신기한 것 같다.
    • 모델의 성능을 개선하기 위해 dropout을 넣거나 배치 정규화를 넣는 등... 천천히 성능을 강화해보는 게 재밌었다. 후반부엔 내가 혼자서 CIFAR-10 데이터셋을 사용하는 모델을(사실상 재사용이긴 하다 ㅋㅋ) 만들어봤다. 맨 아래에 달린 코랩 링크에 내가 구현한 DNN모델이 있다!

    Problem

    • 어디부터 어디를 필기해야 잘 정리했다고 할 수 있을지... 모르겠다! 딥러닝의 이론은 전부 다 적으려면 페이지를 너무 많이 할애하게 되는데, 나는 요약해서 정리하고 싶다... 이게 참 쉽지 않은데 요약 정리도 요령이 필요하다

    Try

    • 아무튼 목표는 나중에 누가 DNN이 뭔지, 어떤 원리로 작동하고 어떤 연산을 하는지 요구받았을 때 어떻게든 설명할 수 있는 정도로는 이해하는 것!... 결국 남에게 설명할 수 있게 이해하는 게 가장 중요한 것 같다. 그렇지 않으면 배워도 도루묵이라고 할 수 있겟따... 

    ✍️학습 내용 정리!

    K-means / K 평균

    • 군집화에서 가장 일반적으로 사용되는 알고리즘
    • 비지도 학습으로 진행
    • 알고리즘이 단순함

    차원 축소 기법

    • 현실의 데이터는 아주 많은 특성을 가지고 있다.
    • 이러한 고차원 데이터는 차원의 저주라는 문제를 발생시킬 수 있음
      • 차원의 저주? 데이터 공간이 기하급수적으로 커져 데이터 간의 밀도가 낮아지고 거리가 멀어지는 현상
    • 이러한 현상을 피하기 위해 차원을 축소하고 일부 특징만 사용하는 기법이 제안되고 있다.

    PCA(주성분 분석)

    비지도 학습 기반의 가장 대표적인 선형차원 축소 기법.

    데이터에 가장 분산이 큰 방향을 새로운 축(주성분)으로 찾고, 이 축에 데이터를 투영하여 차원을 축소한다.

    첫 번째 주성분(PC1)은 데이터의 분산을 가장 많이 설명하는 방향, 두 번째 주성분(PC2)은 PC1과 직교하면서 다음으로 분산을 많이 설명하는 방향, … 이런 방식으로 데이터들을 잘 설명하는 주성분을 찾아낸다.

    • 구현이 간단하고 계산 효율성이 높다.
    • 데이터의 분산을 최대한 보존하는 방향으로 차원을 축소한다.
    • 주성분들은 서로 직교하므로 다중 공선성 문제를 제거하는 효과가 있다.
    • 레이블이 없는 비지도 학습 상황에서 널리 사용된다.
    • iris 데이터셋의 PCA 전후

    인코딩

    • 머신 러닝 데이터는 대부분 숫자형 자료를 입력값으로 받는다.
    • 그러나, 현실 데이터에는 아주 많은 범주형 데이터가 있음
    • 범주형 데이터를 적절한 숫자로 변환하기 위해 다양한 인코딩 방법이 제시되고 있다.

    라벨 인코딩/순서형 인코딩

    • 원리: 각 고유 범주(카테고리)에 0부터 시작하는 정수를 순서대로 할당
    • Scikit-learn 구현: sklearn.preprocessing.OrdinalEncoder
    • 주의점 및 한계:
      • 순서 정보 가정: 이 방식은 변환된 정수 값들 사이에 **순서 관계(예: 0 < 1 < 2)**가 있음을 모델에 암시
      • 순서 없는 명목형 변수에는 부적합

    원 핫 인코딩

    • 각 고유 범주를 **새로운 이진(binary) 특성(열)**으로 만듦. 해당 범주에 속하는 샘플은 해당 특성 열에 1 값을 가지고, 나머지 새로운 특성 열에는 0 값을 가지게 됨. 즉, 희소행렬.
    • 장점:
      • 순서 정보 없음: 변환된 결과는 범주 간의 임의적인 순서 관계를 가정하지 않습니다. 따라서 순서가 없는 명목형 변수 처리에 매우 적합
      • 다양한 모델 적용성
    • 단점:
      • 차원 증가: 생성되는 특성의 수가 크게 늘어나 차원의 저주(curse of dimensionality) 문제가 발생하거나 계산량이 증가.
      • 다중 공선성(Multicollinearity)

    DNN 구현하기

    DNN이란?

    • 여러개의 은닉층을 가진 심층 인공 신경망

     

    • AND, OR, NAND 연산만 가능했던 기존에 비해 레이어 개수를 늘려 XOR 연산을 구현할 수 있게 되었다!
    • DNN의 목적은 모델이 예측한 y값과 실제 y값의 오차(Loss function)를 줄이는 가중치를 찾는 것
    • 이번에 사용할 MNIST 데이터셋은 숫자 0부터 9까지 10개의 클래스를 가지기 때문에, 시그모이드 함수 대신 소프트맥스(softmax)함수를 사용하여 다중 클래스 분류를 수행한다.

    코드로 구현

Designed by Tistory.