🤖

[요약 정리] 2021 NIPA AI 온라인 교육

태그
요약인공지능
최종 편집
Dec 30, 2022 2:33 AM
발행일
November 23, 2021

이전 직장이었던 엘리스에서 AI 교육과정을 무료로 열었다는 걸 페이스북에서 보고 신청해봤다. 컨텐츠가 그리 길지 않고 괜찮다는 얘기를 들어서 시간을 조금씩 내보고 있다. 내가 예전에 만든 것들의 편린이 보이기도 하고, 엘리스에서 내가 학생으로 수업 듣는 건 또 신기한 경험이라 나름 재밌다. 내가 재직하던 시절에 Azure Media Player에 엄청나게 고통받았는데, 처음부터 다시 만들었다는 비디오 플레이어는 아주 만족스럽다.

  • 근데 UI, UX 측면에서는 아쉬운 것이 정말 많이 보인다. 일부는 내가 있었던 때보다 더 퇴보한 것 같은..

이수 후 총평

  • 파이썬 기초는 너무 간단해서 나는 할 필요가 딱히 없었다.
  • 데이터 분석 쪽은 키워드를 알게 된 것은 좋았지만 뒤로 갈수록 내가 이걸 직접 할 일은 별로 없겠다고 느꼈고, 자동완성과 타입 지원이 안되는 환경이 참 어렵다는 걸 느꼈다.
  • 머신러닝과 딥러닝 기초 수업은 학습자료가 무척 만족스러웠다. 이런 개념에 대해 알고 싶었다.
  • 실무 응용 과정은 구색 맞추기 식으로 넣어놓은 느낌이었다. 깊이가 굉장히 얕음.
  • 전체적으로, 머신러닝/딥러닝 개념을 알고 싶었는데 거기에 대해서는 만족한다. 재밌었다.

[기본교육과정] 핵심 파이썬 기초 프로그래밍

01 파이썬 활용을 위한 기초적인 재료

02 특정 조건에 따라 작업을 수행하는 조건문

03 반복되는 명령을 줄여주는 반복문

04 파이썬에서 자료를 담는 여러가지 방식

  • dictionary 의 key로 같은 값을 넣을 수 없다.
  • dictionary 의 key는 immutable해야 한다. 그래서 list는 못 들어가고 tuple은 들어갈 수 있다.

05 같은 듯 다른 함수와 메서드

  • 파이썬에서도 함수와 메서드를 구분하는구나. 함수는 내가 정의한 것, 메서드는 자료형.xx 로 사용하는 것.
    • 자바스크립트로 따지면 프로토타입 안에 정의된 함수가 메서드다.
  • 매개변수(parameter)는 함수 정의부에서 넘겨받은 값을 담은 변수이고, 인자(argument)는 함수 호출부에서 넘기는 값이다.

[기본교육과정] 데이터 분석을 위한 라이브러리

01 파이썬의 여러가지 모듈과 패키지

  • 파이썬의 패키지는 모듈의 디렉토리를 의미한다. 패키지.패키지.모듈 로 import해올 수 있다.
  • from A import B 로 A.B 를 바로 가져올 수 있다.
  • urllib 패키지로 웹페이지 내용을 읽어올 수 있다.

02 데이터 핸들링을 위한 라이브러리 NumPy

  • Numpy 라이브러리는 N차원 배열 객체를 지원
  • Numpy의 배열은 파이썬의 list()보다도 빠른 연산과 효율적인 메모리 사용이 가능
    • np.array()
    • 리스트와 달리 모두 같은 데이터 타입이어야 함.
    • optional로 데이터 타입을 정의할 수도 있음 dtype=float
    • .astype(int) 와 같이 전체에 형 변환 가능
    • .ndim 은 차원, .shape 는 모양
    • .shape = 으로 setter로도 쓸 수 있음. flat 배열이 다차원으로 변경됨
    • 다차원 배열 접근시 index로 가능 matrix[2,3]
    • boolean indexing으로 필터 가능 matrix[matrix < 3]

03 데이터 조작 및 분석을 위한 Pandas 기본

  • pandas가 제공하는 API로 series 데이터( Numpy array가 보강된 형태로, Data와 index를 가지고 있는 데이터 형식)를 만들 수 있음
    • dictionary를 시리즈의 인자로 넣을 수 있음
  • 데이터 프레임 = 멀티 칼럼 시리즈 데이터라고 보면 됨
    • pd.DataFrame(dict)
  • 데이터프레임에서도 마스킹 가능. indexing에 조건 넣으면 됨
    • 또는, .query 로도 가져올 수 있음
  • 새로운 칼럼은 JS 오브젝트 다루듯 넣으면 됨

04 데이터 조작 및 분석을 위한 Pandas 심화

  • 정렬: sort_values
    • 기준 인자를 배열로 넣으면 순서대로 정렬됨
  • 집계 함수들: count()max()min()sum()mean()
  • fillna 로 NaN을 원하는 값으로 채워넣을 수 있음
  • groupby, aggregate

05 Matplotlib 데이터 시각화

  • 시각화에 쓰기에는 너무 로우레벨 API로 보인다. 대충 넘어가자.
  • pandas가 csv를 읽을 수 있구나. 바로 데이터프레임으로 바꿔준다.

[기본프로젝트] 공공 데이터를 활용한 파이썬 데이터 분석 프로젝트

  • 주피터 노트북에서 판다스와 시각화 라이브러리 등을 이용해서 데이터 불러오고 정제하고 시각화하는 걸 보여준다. 모든 게 이미 작성되어있어서 그냥 실행만 하면서 따라갔다.
  • 느낀 점
    • 내가 당장 이 문법 같은 걸 외울 필요는 전혀 없다고 생각하고, 이런게 가능하구나 만 내 무의식이 기억하면 되겠다.
    • 데이터 전처리가 빡세다. 문법은 어렵고, 자동완성이 안되니 또 어렵다. 역시 제대로 된 IDE가 아니다 보니... 그리고 파이썬이 타입 언어도 아니니까.
    • 전처리 잘하는 법, 문법 뭐 쓰면 되는지 등은 어차피 다 똑같을거고 여기서 어떤 인사이트를 뽑아낼지가 경쟁력이겠다. 근데 나는 별로 관심이 없음.

[응용교육과정] 머신러닝 시작하기

00. 인공지능/머신러닝 개론

01. 자료 형태의 이해

image
  • 데이터의 타입을 보고 학습시킬 모델을 결정함
  • 숫자라고 무조건 수치형은 아님. 다른 걸로 변환될 수 있음. 0, 1만 있으면 범주형이라거나.

02. 데이터 전 처리하기

  • preprocessing을 해서 학습하기 쉬운 형태로 만든다.
    • 입력하기 쉬운 형태로 만들기 (특성 엔지니어링)
    • 데이터 정제. null, outlier를 제거함
    • 학습용, 평가용 데이터 분리
  • 범주형 자료를 전처리
    • 수치 맵핑하기
      • 0, 1 따위로 바꾼다
      • 범주가 3개 이상이면 사이 간격을 같게 해서 변환
    • 더미 기법
      • 칼럼을 여러개로 두고 특성에 해당할 때만 1로 둔다
    • ordinal data는 수치 맵핑을 쓸 때 수치간 크기 차이를 커스터마이즈할 수 있음
      • ex) 없음 → 0, 조금 많음 → 4, 매우 많음 → 10
  • 수치형 자료 전처리
    • 바로 인풋으로 사용할 수는 있지만 모델 성능을 높이기 위해 하는 것
    • 스케일링
      • 변수값의 범위/크기를 변환. 변수간 범위 차이가 나면 사용
      • 정규화: 0~1 사이에 두기
        • (x - min) / (max - min)
      • 표준화: 평균과 표준편차 사이에 두기
        • (x - mean) / (std)
    • 범주화
      • 변수 값 자체보다 범주가 더 중요한 경우
        • 평균 이상? 이하?
        • 등급? (A~D)
  • 데이터 정제 및 분리하기
    • 정제하기
      • 결측치 없애기: Null, None, NaN 등
        • 샘플을 삭제하거나(row), 변수를 삭제하거나(column), 대체하거나(평균,중앙값, 러닝으로 예측 등)
      • 아웃라이어 처리하기
        • 통계지표로 판단
        • 데이터 분노로 판단
        • 머신이 판단하게 함
    • 학습용 - 평가용 데이터 분리
      • 7:3 ~ 8:2 비율로 분리
      • 지도학습이라면 feature(예측하기 위한 입력)와 label(예측할 값) 데이터를 분리 저장

03. 지도학습 - 회귀

  • 회귀분석: label이 수치형 데이터일 때, 데이터 패턴을 가장 잘 설명하는 모델을 찾아 입력값에 따른 미래 결과값을 예측하는 알고리즘
  • 단순 선형 회귀
    • Y = B0 + B1X 절편과 기울기를 찾아야 함
    • 실제값과 예측값의 거리 차이로 판단 (loss 함수)
    • image
    • Gradient Descent: 초기값에서 점진적으로 절편과 기울기를 찾아간다. Loss 결과가 계속 작아지도록 업데이트.
    • image
  • 다중 선형 회귀
    • 입력값이 2개 이상, 결과값은 1개
    • Loss 사용, Gradient Descent 쓰는 거 똑같음
    • image
  • 회귀 평가 지표
    • 실제 값과 모델의 예측값 차이를 기반으로 평가
    • RSS: 단순 오차 제곱 합 (loss와 비슷)
    • image
    • MSE(Mean Squared Error), MAE(Mean Absolute Error)
    • image
    • R^2 (결정 계수)
    • image

      04. 지도학습 - 분류

    • 어떤 클래스에 속할지 결정
    • decision tree
      • root node 부터 teminal node 까지 질문을 계속 해나가는 방식
      • 분리 기준 (threshold) 결정하는 게 중요
      • 불순도(impurity)를 최소화하는 구역으로 나눠야 함
        • 불순도 = 다른 데이터가 섞여있는 정도
        • image
      • decision tree가 깊을수록 더 세분화해서 나눌 수 있지만 overfitting 의 함정이 있음
      • 학습 끝나면 작업 속도가 매우 빠름
    • 분류 평가 지표
      • Confusion Matrix: True Positive, False Negative, False Positive, True Negative
      • image
      • 정밀도(Precision): Positive라고 분류한게 정말 Positive인 비율
        • Negative인 데이터를 Positive로 판단하면 안될 때 사용 (e.g., 스팸메일 판단)
      • 재현율(Recall): 실제로 Positive인 데이터 중 모델이 Positive로 분류한 비율
        • Positive가 중요한 경우 (e.g., 악성 종양 여부)

[응용교육과정] 딥러닝 시작하기

01 퍼셉트론

  • 딥러닝의 가장 기본적인(오래된) 모델. 1958년
  • 인풋별로 edge에 weight를 넣어서 activation function의 결과로 세포가 활성화되는지 아닌지 결정
  • 단층 퍼셉트론: 2차원상에 선을 그어서, 여기 넘어가면 무엇이고 안넘어가면 무엇이 아니다, 라고 구분짓는 것으로 생각할 수 있음
    • 하나의 선으로 분류 못하면 안 됨 → 1차 빙하기
  • 다층(Multi-layer) 퍼셉트론
    • 인풋 → 아웃풋만 있던 상태에서, 중간 단계(hidden layer)가 생김
    • hidden layer가 많아지면 딥러닝이라고 부름
    • 장점: 분류 성능이 좋아짐
    • 단점: 구해야 할 가중치가 기하급수적으로 늘어남

02 텐서플로우와 신경망

  • 딥러닝도 기본적으로는 퍼센트론과 같음. 오차값(loss function의 결과)을 최소화하는 가중치를 찾는 알고리즘 사용.
  • 딥러닝 모델의 학습 순서
    • 학습용 피처 데이터로, 순전파(forward propogation)로 예측값 구하기
    • 예측값과 실제값 사이의 오차 구하기(Loss)
    • Loss 줄일 수 있도록 가중치 업데이트
      • 최적화는 Gradient descent 사용
      • Gradient의 값은 가중치마다 정해지며, 역전파를 통해 구함
    • 반복
  • 딥러닝 모델의 구현 순서
    • 데이터 전처리
    • 딥러닝 모델 구축
    • 모델 학습
    • 평가 및 예측
  • 텐서플로우
    • 가장 많이 쓰이는 딥러닝 프레임워크. 대형 클러스터부터 스마트폰까지 다양한 디바이스에서 동작 가능
    • 데이터 전처리
      • 텐서플로우는 Tensor(다차원 배열) 형태로 데이터를 입력받음
      • image
    • 모델 구축
      • 텐서플로우 패키지로 제공되는 Keras API를 이용
      • image

      • 인풋 레이어는 입력 형태(input shape OR input dimension)에 대한 정보를 필요로 함
    • 모델 학습시키기
      1. image
      2. optimizer는 GD를 필두로 여기서 개선된 여러가지가 있으나 silver bullet은 없으므로 이것저것 해봐야 함
      3. loss는 회귀분석에서는 보통 MSE, 분류에서는 Cross Entropy를 쓰는데 여기도 silver bullet은 없음
    • 평가 및 예측하기
    • image

03 다양한 신경망

  • 이미지 처리(얼굴인식, 화질 개선, 자동 태깅...)
    • 전처리시 모두 같은 크기를 가지는 이미지로 통일시킨다. 해상도와 색 표현 방식도 통일시킨다.
    • 기존 다층 퍼셉트론 기반 신경망은 이미지를 처리하려면 픽셀별로 다 인풋이 되기 때문에 파라미터가 엄청나게 많이 필요함
      • 1차원으로 인풋을 다 합치기 때문에 "위치"에 대한 정보가 없어짐
      • 이미지의 rotation이라든가, 조금이라도 변화가 있으면 대응이 안 됨
    • 이를 해결하기 위해 나온 것이 합성곱 신경망(CNN, Convolution Neural Network)
      1. image
        image
      2. 필터링
        • 이미지에서 어떤 특징이 있는지 구한다. 필터를 통과한 이미지가 있는지 찾는 것.
        • 필터가 이미지를 이동하며 새로운 이미지(피처맵)를 생성.
        • 해당 피처가 어디에 위치했는지 요약한 지도.
        • 피처맵에서는 패딩을 줘서 원본 사이즈와 똑같이 만들어주는 게 필요
          • 스트라이드를 줘서 필터의 이동 거리를 설정할 수도 있음
      3. pooling layer
      4. image
      5. 이렇게 필터링된 결과를 1차원 배열로 만들고 FCL에 넣어서 분류한다.
      6. 분류에는 Softmax 활성화 함수 사용
        • a + b + c + d + e + f = 1, a~f는 각각 분류하고자 하는 카테고리일 확률을 뜻함
      image
  • 자연어 처리 (기계번역, 음성인식, ..)
    • 전처리 → 단어 표현(word embedding) → 모델 적용
    • 전처리
      • Noise Canceling: 오타, 맞춤법, 띄어쓰기, 줄임말, 속어 등의 오류를 표준어로 교정
      • Tokenizing: 문장을 토큰으로 나눔. 토큰의 단위는 목적에 따라 다르게(어절, 단어 등) 정의
        • 단어에 의미를 부여하여 숫자로 변환해서 인풋 데이터로 넣기 위함
      • StopWord removal: 감탄사 등 불필요한 단어 제거. 목적에 따라 접속사(그런데, 그러나 등)도 필요없을 수 있음
    • 숫자형 데이터로 변환
      • Bag of Words 를 이용해서 각 단어에 index를 부여
      • image
    • CNN 처럼, 자연어에서도 각 단어에 대한 특징을 부여할 수 있음. 이게 Word Embedding
      • bag of words index는 아무 의미 없는 숫자인데
      • 이를 다시 embedding table을 이용해 벡터로 변환
        • 벡터는 유사도를 계산할 수 있고, 연산도 가능 (단어와 단어가 비슷하다, 단어와 단어를 더한다 등)
      • 이처럼 토큰 간의 순서와 관계를 적용하는 모델이 순환 신경망(RNN, Recurrent Neural Network)
    • RNN
      1. image
      2. 이전 토큰의 영향을 받기 때문에 순서관계가 유의미하게 됨