[부스트캠프 AI tech 4기] week 1 회고 📝 - Python & AI Math

반응형

BoostCamp AI tech

 

 

Contents

     

     


    부스트캠프 AI tech 4기를 진행한 지 1주가 지났습니다. 슬랙에는 정말 많은 채널과 Tip들 그리고 자유롭게 채널을 생성하고 정보 공유를 하며, 스터디도 구하고 공유하는 문화가 잘 갖춰져 있습니다. 특히 운영진들과 멘토 조교님들이 활발하게 공유문화를 장려해서 캠퍼분들도 열정 있게 적극적으로 임하는 느낌입니다.

     

    이번 포스팅에선 1주 동안 배운내용과 부스트캠프의 이벤트들을 간략히 정리하고자 합니다.

     

    1. 강의 내용

    1) Python

    1️⃣ Python 기초

    1~2 강에 걸쳐, 파이썬의 설치부터 환경설정(conda)과 기초적인 변수, 조건문, 반복문, string 관련 메소드들을 배웠습니다. 한 가지 특이했던 점은 함수에서 전역 변수에 있는 리스트를 호출해서 값을 변경하면 전역 변수에 있는 리스트의 값이 바뀌는 부분에 대해 개념화를 해주었습니다. 이를 Call by Object Reference라고 객체 참조에 의한 호출이라고 하는데, 막연히 쓰던 부분을 개념화해주어서 좋았습니다. 이는 추후에 따로 정리해서 포스팅하겠습니다.

     

    2️⃣ Python 자료구조

    3강에서 스택, 큐와 파이썬의 기초 자료형인 튜플, 셋(set), 딕셔너리를 배웠고 collection 라이브러리의 deque(덱), OrderedDict, defaultdict, Counter, namedtuple의 기초를 간략히 배웠습니다. 또한, 리스트 컴프리헨션과 enumerate, zip, lambda, map, reduce와 iterable, generator, 함수의 인자들(가변 인자, 키워드 가변 인자), asterisk(*)를 통한 unpacking을 배웠습니다.

     

    3️⃣ OOP와 모듈

    4강에서는 Python에서 class를 활용한 OOP의 기본 사용법과 상속, 다형성, 캡슐화의 기초를 배웠습니다. 그리고 일급 함수와 함께 closure(클로저), decorator(데코레이터)의 기초를 배웠습니다. 그리고 module을 만들어서 간간한 패키지를 구성했고, 구성한 패키지를 import 해서 사용해보는 간단한 실습을 해보았습니다.

     

    4️⃣ 예외처리, File 처리, Logging, 정규식

    5강에서는 try except를 통한 예외처리와 os, shutil, pathlib pickle 라이브러리를 통한 경로 및  파일 처리를 간단히 알아보고, logging 라이브러리를 통한 로그 남기는 방법을 알아보았습니다. 이때 configparser와 argparser를 통해 로그 남기는 방법과 logging.conf라는 환경설정 파일을 통해 Logging의 format을 지정하는 방법도 배웠습니다. 또한, CSV, WEB(HTML), XML, JSON 다루는 기초방법과 정규식을 통해 원하는 문자열 패턴을 추출하는 방법을 배웠습니다. (정규식 연습 사이트: http://www.regexr.com/)

     

     

    5️⃣ Numpy

    6강에서는 numpy의 기초를 학습했습니다. Ndarray(배열)을 다루는 다양한 방법과 배열을 생성하는 다양한 기법(np.ones, np.zeros, np.eye, np.diag, np.identity 등)을 배웠습니다. 배열간 연산(sum, mean, std, var 등)을 할 때, axis(축)을 기준으로 하는 방법과 concatenate(결합)을 수평(hstack) 수직(vstack)으로 하는 방법을 배웠고, 배열간 연산시 Element-wise 연산, 내적(dot product)와 broadcasting의 기초개념을 배웠습니다. 배열간 비교에서는 np.where, boolean index, fancy index를 배웠고 배열을 파일(.npy 파일)로 쓰는 numpy data i/o를 배웠습니다.

     

    6️⃣ Pandas

    7강에서는 Pandas의 기초를 학습했습니다.

    7-1강에선 주로 Series를 다루는 방법과 DataFrame을 다루는 방법을 학습했습니다. 간단한 indexing 방법부터 데이터를 선택하는 다양한 방법, 연산하는 방법들을 배웠습니다. 그리고, DataFrame에 lambda, map, apply, applymap을 쓰는 기초 방법을 학습했고, pandas의 built-in function(describe, unique, isna, corr, covar, value_counts, 통계 함수 등)을 배웠습니다.

    7-2강에선 조금 심화된 DataFrame을 다루는 방법을 배웠습니다. Groupby의 내부 연산(split → apply → combine) 과정을 기초로 해서 Hierarchical index(위계 인덱스;다층 인덱스)를 다루는 방법(unstack, swaplevel, sort_index, index level control 등)을 배웠고, Groupby를 Aggregation 하는 방법과 Transformation(변형), filtration(필터링) 하는 방법을 배웠습니다. 이후, 실제 예시를 통해 groupby와 Pivot Table, Crosstab 방식을 비교했고, Merge(Inner join, left join, outer join 등)와 axis에 따른 Concat 방식을 배웠습니다. 또한, DB의 정보를 DataFrame으로 가져와 로딩하는 기초 방식을 배웠습니다.

     

    2) AI Math 

    1️⃣ Vector

    1강에서는 벡터 기초를 배웠습니다. 벡터의 개념, 연산과 L1 norm, L2 norm의 의미, 벡터 간 거리, 각도 구하기. 벡터 내적이 정사영된 벡터의 길이와 관련있음을 통해, 두 벡터간 유사도를 측정할 때 사용된다는 것을 배웠습니다.

     

    2️⃣ Matrix(행렬)

    2강에서는 행렬의 기초 개념과 연산(덧셈, 뺼셈, 성분곱, 스칼라곱, 행렬곱)을 배웠습니다. 또한, 실제 머신러닝에서 행렬은 두 벡터를 연결시키는 하나의 연산자(보통 가중치 행렬 W)로서, 행렬이 벡터를 다른 차원의 벡터로 변경한다는 점을 배웠습니다. 역행렬과 유사 역행렬(Moore-Penrose;Pseudo-inverse)을 배웠고 유사 역행렬을 이용해 연립방정식을 푸는 방법과 선형 회귀를 하는 방법을 배웠습니다.

     

    3️⃣ Gradient Descent(경사 하강법) 기초

    3강에서는 미분의 기초개념과 미분 값을 이용한 경사 하강법 개념을 배우고, 슈도 코드를 짜보았습니다. 또한, 변수가 실수가 아니라 벡터인 경우 편미분을 통한 그레디언트 벡터를 배우고, 그레디언트 벡터와 L2-norm을 이용한 벡터의 경사 하강법을 배웠습니다.

     

    4️⃣ Gradient Descent(경사 하강법) 활용

    4강에서는 경사 하강법을 활용하는 방법을 배웠습니다. 먼저, 경사하강법을 통해 선형 회귀를 하는 방법을 배우고, 그레디언트 벡터의 L2 norm을 목적식으로 이를 최소화하는 수식을 유도해보았습니다. L2-norm은 제곱근이라 이를 제곱한 것을 통해 더 간단한 구현을 슈도 코드와 함께 해보았고, 경사 하강법의 한계(Non Convex에서 최솟값 보장 X)를 배웠습니다.

    이후에, 확률적 경사 하강법(SGD)의 원리와 미니 배치에 따른 성능이 어떻게 되는지를 배웠습니다.

     

    5️⃣ DeepLearning(딥러닝) 기초

    5강에서는 딥러닝의 기초개념을 배웠습니다. 신경망의 구성과 수식으로 어떻게 표현되는지를 배웠고, 소프트맥스(SoftMax) 연산과 활성 함수를 배웠습니다. 활성 함수의 의미(신경망에 비선형성을 부여)를 배웠고, 2층 신경망 예시와 다층 신경망, 층을 여러 개 쌓는 이유(파라미터 개수 감소)를 배웠습니다. 또한 역전파 알고리즘의 기초인 연쇄 법칙을 배우고, 2층 신경망에서 역전파가 어떻게 계산되는지 배웠습니다.

     

    6️⃣ Probability Theory(확률론) 기초

    6강에서는 딥러닝에 확률론이 필요한 이유(Loss를 최소화하는 통계적 기계학습이 토대)를 배웠고, 이산 확률변수와 연속 확률변수의 구분을 배웠습니다. 결합 분포와 이를 통한 주변 확률 분포 그리고, 조건부 확률분포를 배웠습니다. 이후, 조건부 확률이 기계학습에서 어떻게 쓰이는지 특히 분류 문제와 회귀 문제에서 어떻게 쓰이는지를 배웠습니다. 기댓값의 개념과 활용(분산, 첨도, 공분산 구하기)을 배웠고, 몬테카를로 샘플링(확률분포를 모를때 기대값 구하는 법)의 개념과 예제(연속 확률분포에서 적분 값 구하는 예제)를 배웠습니다.

     

    7️⃣ Statistics(통계) 기초

    7강에서는 통계 기초를 배웠습니다. 모수적 방법론(데이터가 특정 확률 분포를 따른다고 가정하고 분포를 결정하는 모수 추정)의 개념을 배웠고, 비모수 방법론과 확률분포를 가정하는 방법을 간단히 배웠습니다. 데이터로 모수를 추정하는 방법과 중심 극한 정리(표본을 이용해 모집단을 추정하는 방법)와 최대 가능도 추정법(MLE: 데이터가 주어진 상황에서 모수(ϴ)를 변수로 갖는 가능도 함수의 최대값 찾기)와 로그가능도함수(효율적으로 정확한 연산을 위해 MLE이 로그씌운것)의 의미를 배웠습니다. 정규분포에서의 최대가능도를 추정하는 예제와 카테고리분포에서 최대가능도를 예제를 배웠습니다. 이때, 라그랑주 승수법을 적용하는 방법을 배웠습니다. 그리고, 딥러닝에서 최대가능도 추정하는 수식을 배웠고 이를 기반으로 확률분포의 거리를 구하는 쿨백-라이블러 발산을 간단히 배웠습니다.

     

    8️⃣ Bayesian Statistics(베이즈 통계학) 기초

    8강에서는 베이즈 통계학 기초를 배웠습니다. 조건부 확률식으로부터 사전 확률을 사후 확률로 업데이트하는 베이즈 정리식에서 Evidence(데이터 자체의 확률)과 likelihood(가능도: 현재 가설에서 데이터가 관측될 확률)을 배웠습니다. 코로나 예제를 통해 키트에서 양성으로 나왔을 때, 진짜 양성일 확률을 베이즈 정리를 통해 계산해 보았고, 사후 확률을 2번 갱신하는 예제도 풀어보았습니다. 또한 조건부 확률이 인과관계에 잘못 쓰일 때 중첩 요인(confounding factor)에 의해 잘못 추론하는 개념과 예시(신장 결석 치료 수술, 주사)를 통해 모순될 수 있음을 배웠고, 중첩 요인을 제거해서 계산하는 방법을 배웠습니다.

     

    9️⃣ CNN 기초

    9강에서는 CNN 기초를 배웠습니다. Convolution 연산의 개념(커널을 통해 연산)과 수학적 의미(cross-correlation 연산)를 배웠고, 시각화해서 커널의 특징(국소성, 변화 없음(translation invariant))을 배웠습니다. 2차원, 3차원에서 Convolution 연산이 어떻게 되는지를 배웠고, Convolution 연산의 역전파를 예시와 함께 입력이 업데이트되는 과정, 커널이 업데이트 되는 과정을 배웠습니다.

     

    🔟 RNN 기초

    10강에서는 RNN 기초를 배웠습니다. 시퀀스(Sequence) 데이터에 대한 이해부터 이를 다루는 방식의 과정(조건부 확률 -> 가변 길이 문제점 -> 자기 회귀모델 -> 길이설정의 어려움 -> 잠재 자기회귀 모델 -> 잠재 변수 인코딩 방법의 어려움 -> 잠재변수 인코딩 방법의 해결이 RNN)을 배웠습니다. RNN의 기초 모형과 Hidden State(H)와 입력(X)에 따라 결과(O)가 나오는 수식과 역전파(BPTT)의 수식이 어떻게 되는지를 배웠습니다. 또한, 기울기 소실(시퀀스 길이가 길수록 과거 정보 소실되는 문제)과 이를 해결하는 방법론(LSTM, GRU)의 기초개념을 배웠습니다.

     

    2. 피어 세션

    1) 일반

    피어 세션이 뭔지 처음에 와닿지 않았습니다. 그런데 막상 해보니 매일 1시간씩 그냥 만나는 시간을 만들어 준 게 다였습니다. 그리고, 피어 세션 때 어떤식으로 공부한 것을 나누는게 좋을지 운영진의 도움과 함께 만들어갔습니다. 간단한 규칙을 정하고, 피어세션때 어떤 정보를 나누면 좋을지 자유롭게 정했습니다. 저희 조 같은 경우는 피어세션때 강의에서 모르는 부분 질문하는 시간과 다음날 피어 세션까지 강의를 어디까지 들을지 정하는 토대를 처음에 만들었습니다. 다음 주부터는 코딩 테스트를 한주에 1번씩 같이하기로 했습니다. 확실히 뭔가 같이 공부하는 동료가 있다는 점에서 든든하고 쉽게 지치지 않는 효과가 느껴집니다. 

     

    2) 한 주 회고

    회고록

    3. 그 외 이벤트들

    1) 마스터클래스

    마스터클래스에서는 AI Math강의를 해주시던 임성빈 교수님이 공부하는 방법과 취업하는 방법, 대학원 가는 방법 등을 설명해주셨습니다.

    2) 오피스아워

    매 주차에는 과제가 나옵니다. 1주 차에는 기본과제 3개와 심화 과제 3개가 나왔습니다. 오피스 아워에서는 조교님이 심화과제를 해설해주셨습니다. 개인적으로 오영석 조교님의 상세한 설명과 함께한 심화과제 3번 해설이 너무 좋았습니다.

     

    3) 업스테이지 강연 - Data Centric AI

    별도로 공지사항에 강연들을 사람 신청하라고 해서 신청하여 들었습니다. AWS의 구태훈 님의 강연이었습니다. AI가 기존에 캐글이나 여러 경진대회에서 모델 중심으로 발전한 경향이었다면, 이제는 데이터를 중심으로 해야 한다라는 요지였습니다. 이유는 데이터를 개선했을 때가 모델을 개선했을 때보다 훨씬 결과에 큰 영향을 끼치기 때문입니다. 특히, 이번 강연에서는 실제 비즈니스에서 어떻게 하면 Data Centric으로 나아갈 수 있을지 방향성들을 공유해주셨습니다. 참고로 Data Centric AI는 앤드류 응 교수님이 21년도에 유튜브를 통해 강연을 하시면서 큰 화제가 되어 지금까지 이 화제가 이어져오고 있는 것으로 보입니다. (관련 링크: https://www.youtube.com/watch?v=06-AZXmwHjo&t=769s) 

     

     

    이상으로 1주 차 회고를 마치겠습니다. 감사합니다.

    반응형

    댓글

    Designed by JB FACTORY