부스트캠프 AI Tech 1주차 주간 학습 정리
Day 1
- 학습 강의 : Python Basic for AI 1-1 ~ 3-2강
- 과제 : 필수과제 1, 2, 3
1. 강의 요약 및 새로 알게된 내용
- 개발환경 세팅 : Jupyter notebook, Colab
- Github의 ipynb파일의 URL에서 gitbub.com -> github로 변경하고 colab.research.google.com앞에 추가
- 개인적으로 Github Blog 공부 후 생성
- Numpy의 np.median() 함수
- array의 길이가 홀수일 경우 중앙값 1개, 짝수일 경우 중앙값 2개의 평균을 반환
- Pre-course에서 이미 한 번 들었기 때문에 간단하게 복습
2. 고민한 내용
- Peer session을 더 효율적으로 할 수 있는 방법
3. 참고할 만한 자료
4. 피어세션
- HackerMD를 사용하여 회의록 공동 작성
- 피어끼리 Github Group을 만들고 레퍼지토리의 Wiki에 회의록 업로드
- 자세한 내용은 MeetUP & day 1 참조
5. 회고
- 이미 배웠던 것들을 다시 들으면서 처음 강의 들을 때는 무조건 기억할 거라고 자신했던 나를 반성하고… 이번 기회에 내 머리는 그리 좋지 못하다는 것을 파악하였고 복습의 중요성을 깨달았다. 깃허브 블로그와 마크다운 사용법을 익히고 이를 활용하여 당일 배운 것을 복습하여 정리하는 습관을 들이도록 노력해야 할 것 같다.
- 멘토 소개 시간에서 좋은 말씀을 해주셨다.
당신이 가는 곳이 다 길이다.
- 내가 가는 길을 의심하지 않고 꾸준히 걸어가보려고 한다.
Day 2
- 학습 강의 : Python Basic for AI 4-1 ~ 4-2강, AI Math 1 ~ 4강
- 과제 : 필수과제 4, 5 & 필수 퀴즈 1 ~ 4강
1. 강의 요약 및 새로 알게된 내용
- 파이썬 함수를 모듈화하는 방법
- 파이썬 decorator에 관한 내용
- x가 2차원 벡터이면 2차원 평면 상의 점으로 볼 수 있다. -> 이를 확장하면 n차원 벡터는 n차원 평면 상의 점으로 볼 수 있다.
- 입력 데이터가 n x m 행렬로 주어진다면 m차원 벡터가 n개 존재하는 것으로 해석 -> m차원 벡터는 m차원 상의 점으로 이를 하나의 데이터로 간주할 수 있고 이러한 데이터가 n개 존재한다.
- 경사하강법 기본 원리
2. 고민한 내용
- 경사하강법에서 선형회귀 목적식을 직접 미분해봤는데 정확하게 유도가 되지 않았다.
- 이번 필수과제 4에서 main 함수 짜는데 많은 시간이 걸렸다. 종료 조건을 설정하는데 표현 상 애매한 부분이 있었던 것 같다. 그리고 어떻게 하면 while문의 반복 없이 깔끔하게 짤 수 있을까 고민을 했다.
(고민만 했다)
3. 참고할 만한 자료
4. 피어세션
- 필수과제 1, 2, 3에 대한 코드 리뷰를 진행하였다.
- 생각보다 강의의 양이 많아 그날 그날 계획을 수정하기로 했다.
- 자세한 내용은 Week1_day2 참조
5. 회고
- 코스 시작 전에 들었을 때에는 잘 이해가 되지 않았는데 다시 들어보니깐 이해가 되는 부분이 많았다. 모르는 부분이 있더라도 반복해서 보면 언젠간 이해가 되지 않을까?
Day 3
- 학습 강의 : Python Basic for AI 5-1 ~ 5-2강, AI Math 5 ~ 6강
- 과제 : 필수퀴즈 5, 6강, 선택과제 진행
1. 강의 복습
Python Basic for AI
5-1강 : File/Exception/Log handling
- 예상 가능한 예외, 예상 불가능한 예외가 존재
- 예상이 불가능한 경우 Exception handling이 필요하다.
- try ~ except 문법을 사용
- raise, assert 코드를 이용해 에러를 강제로 발생
- 파일은 텍스트 파일과 바이너리 파일로 나뉜다.
- file을 open할 때 w 모드와 a 모드의 차이점 : w는 새로 쓰는 것, a는 덧붙여서 쓰는 것(append 개념)
- os 모듈 사용법 : os.mkdir, os.path.join 등, pathlib 모듈도 있다.
- Pickle : 파이썬 객체를 영속화(persistence)하는 bulit-in 객체
- 로그 : 프로그램이 실행되면서 일어나는 정보를 기록한 것
- login level : debug, info, warning, error, critical
- 프로그램 실행할 때 설정하는 방법
- configparser : 파일에 설정
- argparser : 실핼 시점에 설정
5-2강 : Python data handling
- 데이터 저장 타입 : CSV, HTML, XML, JSON 등이 존재
- CSV 객체로 CSV 처리 : 문장 내에 들어가있는 ‘,’ 등에 대해 전처리가 필요하기 때문
- 데이터를 처리할 때 encoding에 유의, delimeter는 데이터를 자르는 기준, quotechar는 데이터를 묶는 기준이 된다.
- urllib을 이용해 웹페이지의 컨텐츠를 가져올 수 있다.
- XML은 다른 디바이스의 머신(PC <-> 스마트폰)끼리 데이터를 주고 받는데 유용하다.
- BeautifulSoup 모듈 사용법
- JSON은 Python의 dict type과 유사하다. 읽을 때는 loads 쓸 때는 dump 명령어를 사용(json 모듈)
AI Math
5강 : 딥러닝 학습 방법 이해하기
- 비선형모델인 neural network의 원리
- softmax함수를 통해 선형모델을 확률벡터로 변환할 수 있다.
- 분류 문제를 풀 때 선형모델과 softmax 함수를 결합하여 해결할 수 있다.
- 추론의 경우 softmax함수가 아닌 one-hot 벡터를 이용
- 신경망은 선형모델과 활성함수를 합성한 함수이다. 이 때 활성함수는 하나의 실수값을 input으로 받는다.
- 벡터나 행렬이 들어온다면 각각의 요소에 활성함수를 적용한다. 즉, 개별적으로 함수를 적용해 새로운 히든 벡터를 생성한다. 히든 벡터를 뉴런이라고 부른다.
- 활성함수는 실수 범위에서 정의된 비선형 함수를 의미한다.
- 가중치 행렬과 활성함수를 여러 번 합성하게 되면 이것이 신경망이 되고 이를 순전파(forward propagation)라 한다.
- 역전파 알고리즘 : 경사하강법을 적용해 각각의 가중치 행렬들을 학습, 이 때 가중치 행렬들의 Gradient Vector를 계산해야 한다.
- 연쇄법칙이 기반이 된다.
6강 : 확률론 맛보기
- 데이터에서 관찰되는 분포와 모델 예측의 분포의 차이를 최소화하도록 학습한다. 즉, 확률론 기반으로 해석이 가능하다.
- 확률변수는 함수이다.
- 이산형 확률변수는 확률변수에 값을 가지는 모든 확률을 더해서 모델링하고 연속형 확률변수는 적분을 통해서 모델링한다.
- 조건부 확률에 대한 설명
- 데이터 x가 주어질 때 선형모델과 결합하여 softmax함수를 이용하면 확률벡터를 구할 수 있다.
- 기대값에 대한 설명
- 이산형 확률 변수는 질량함수를 확률과 곱하여 급수를 취하고 연속형 확률 변수는 밀도함수 곱하여 적분을 취해 기대값을 구한다.
- 확률분포를 모를 때에는 몬테카를로 샘플링 방법을 사용 -> i.i.d(identical independent distributed)를 만족하는 확률변수여야 한다.
2. 새로 알게된 내용 / 고민한 내용 (강의, 과제, 퀴즈)
- 강의나 퀴즈는 Precourse에서 이미 한 번 했기 때문에 복습하는 차원에서 진행하였다.
3. 참고할 만한 자료
4. 피어세션
- 필수퀴즈의 베이지안 공식에 대해 질문을 하고 답변을 받았다.
- 필수과제 4, 5에 대한 코드리뷰를 진행
- 자세한 내용은 Week1_day3 참조
5. 회고
- 다음부터는 아이패드 굿노트와 필기한 것을 활용하여 이미지도 첨부하여 글을 정리하면 좋을 것 같다.
- 오늘 멘토링을 진행했는데 스마트 팩토리, 스타트업에 대한 설명과 목적 의식, 동기 부여에 대한 좋은 조언을 얻었다. 그리고 가능하다면 캐글을 병행하는 게 많은 도움이 될 것이라고 하셨다. 그렇게 되게끔 만들어보자!
Day 4
- 학습 강의 : Python Basic for AI 6강, AI Math 7 ~ 9강
- 과제 : 선택과제1, 3
1. 강의 복습
Python Basic for AI
6강 : numpy
- numpy의 ndarray는 dynamic typing을 지원하지 않는다. -> 하나의 데이터만 가능!
- reshape를 사용할 때 -1을 통해 size를 자동적으로 계산한다.
- numpy에서 2차원 배열에 접근할 때 array[0, 1]과 같이 ,로 접근할 수 있다.
- slicing 문법을 이용하여 짝수열만 출력하는 것이 가능하다.
- ex)
arr[:, ::2]
- ex)
- something_like를 통해 기존 ndarray의 shape 크기 만큼 원하는 형태의 ndarray를 생성할 수 있다.
- operation functions을 이용할 때에는 axis 개념이 가장 중요하다. 새롭게 생긴 축이 axis = 0 이다.
- numpy에서는 broadcasting에 주의하면서 연산을 해야한다.
- np.where에서 조건과 True일 때 값, False일 때의 값을 넣어주면 그 값이 적용된다.
a = np.array([1,3,0]) np.where(a > 0) # index 반환 >>> array([0, 1]) np.where(a > 0, 3, 2) # True일 때 3, False일 때 2를 대입하여 반환 >>> array([3,3,2])
AI Math
7강 : 통계론 맛보기
- 통계적 모델링은 확률분포를 추정하는 것
- 모수적(paramatic) 방법론 : 데이터가 특정 확률분포를 따른다고 가정하고 그 분포의 모수를 추정하는 방법론
- ex) 정규분포의 모수 \(\mu\)(평균), \(\sigma^2\)(분산)
- 데이터에 따라 모델의 구조와 모수의 개수가 변하면 비모수(nonparamatic) 방법론
- 기본적으로 확률분포에는 모수가 따라온다.(모수의 개수는 분포에 따라 다르다)
- 데이터 생성 방법에 따라 확률 분포를 가정해야 한다. -> 데이터 관찰이 선행!
- 표본분포(sample distribution) VS 표집분포(sampling distribution)
- 표집분포는 표본평군과 표본분산에 대한 확률분포
-
최대가능도 추정법(maximum likelihood estimation, MLE)
\(\hat \theta_{MLE}=\underset{\theta}{\text{argmax}}\,L(\theta, x) = \underset{\theta}{\text{argmax}}\,P(x|\theta)\)
- 확률밀도함수 => \(\theta\) (모수)가 주어졌을 때 \(x\) 에 대한 함수
- 가능도함수 => 데이터 \(x\) 에 대해서 \(\theta\) (모수)를 변수로 가지는 함수 : 데이터가 주어진 상황
- 로그가능도를 사용해 곱셈 연산을 덧셈 연산으로 바꿔준다. -> 최적화 !!
- 기계학습의 원리 : 데이터로부터 확률분포 사이의 거리를 최소화
8강 : 베이즈 통계학 맛보기
- 데이터가 새로 추가될 때마다 정보를 업데이트 -> 베이즈 정리 !
- 조건부 확률로 인과 관계를 추론 X
- 데이터 분포의 변화에 강건한 예측모델 => 인과 관계 도입 but 정확도 down
- 중첩 요인을 제거하고 인과관계를 계산해야 한다.
- Simpson’s paradox
- ex) 키와 지능 -> 키는 나이와 연관, 나이는 지능에 영향 -> 이러한 요인을 제거!!
9강 : CNN 첫걸음
- Convolution 연산 : 가중치 행렬이 아닌 커널(kernal)을 이용
- 커널 : 고정된 가중치 행렬
- 커널의 사이즈만큼만 입력 벡터에서 활용 -> 입력 벡터의 크기 - 커널의 크기 + 1
- 신호를 커널을 이용해 국소적으로 증폭 or 감소
- 다양한 차원에 적용 가능
- 채널이 여러 개인 2차원 입력의 경우 커널을 채널 개수에 맞춰 늘린 후 적용
- Convolution 연산의 역전파를 계산하게 되면 Convoultion 연산이 나온다.
2. 새로 알게된 내용 / 고민한 내용 (강의, 과제, 퀴즈)
- numpy의 동작 원리와 여러 함수에 대해 새롭게 배웠다.
- 선택과제 1을 하면서 직접 손실 함수를 미분하여 Gradient를 계산하였고 경사 하강법의 원리에 대해 더 잘 파악할 수 있었다.
- minibatch SGD은 주어진 데이터에서 minibatch 사이즈만큼 임의로 추출하여 모델을 학습시킨다.
- 선택과제 3을 통해 최대가능도 추정법에 대한 자세한 이론을 공부할 수 있었다.
3. 참고할 만한 자료
4. 피어세션
- 선택과제1에 대해서 코드 리뷰를 진행
- 경사 하강법에서 벡터 연산에 대해 한 분의 Peer가 도움이 되는 내용을 공유
- 자세한 내용은 Week1_day4 참조
5. 회고
- 선택과제 3을 하면서 최대가능도 추정법에 대해 구글링을 했는데 선택과제 3과 동일한 글이 나왔다.
역시 구글이 짱인가? - 오늘 임성빈 교수님의 마스터 클래스가 있었다. 기초 수학 선형대수학, 확률론, 통계학을 매우 강조하셨다. 추천해주신 사이트와 책을 통해 기초를 탄탄하게 다져야겠다. 가장 좋은 공부 방법은 정의를 여러 번 보고 어디에서 가장 많이 사용되는지 예제 위주로 공부하는 것이다.
- 대학원 얘기도 많이 나왔는데 요약하자면 이미 많은 연구가 된 분야는 학사로도 충분하지만 새로운 분야라면 대학원이 훨씬 낫다. 아직 AI 공부 시작한 지 얼마 안 되었지만 공부하면서 관심가는 분야를 정하고 진로를 설정해야 할 것 같다.
Day 5
- 학습 강의 : Python Basic for AI 7-1 ~ 7-2강, AI Math 10강
- 과제 : 선택과제2
1. 강의 복습
Python Basic for AI
7-1 ~ 7-2강 : pandas
- series Object에 대한 설명
- loc은 index 이름으로 접근, iloc은 index position으로 접근 !
- 데이터 프레임의 작업할 때 본 프레임에 다시 할당해줘야 작업한 내용이 적용된다.
- numpy와 마찬가지로 fancy index, boolean index 사용 가능
- drop 함수는 axis 지정해서 축을 기준으로 제거(axis = 1 이라면 column이 삭제)
- 연산할 때는 항상 index가 기준이 된다.
- groupby 명령어로 데이터 프레임을 조작할 수 있다.
- Pivot Table, Crosstab 기능도 지원
- merge 할 때 join method(left, right, inner, outer)가 존재함
AI Math
10강 : RNN 첫걸음
- 시퀀스 데이터 : 순차적으로 들어오는 데이터(소리, 문자열, 주가 등)
- i.i.d 가정을 위배하기 쉽다 (순서가 중요하기 때문)
- 과거의 정보를 가지고 앞으로 발생할 데이터의 확률분포를 다루기 위해 조건부 확률을 사용 \(P(X_1,\cdots,X_n) = P(X_t|X_1,\cdots,X_{t-1})=\prod_{s=1}^tP(X_s|X_{s-1},\cdots,X_1)\)
- 과거 정보의 필요성에 따라 시퀀스 데이터의 모델링이 바뀐다.
2. 새로 알게된 내용 / 고민한 내용 (강의, 과제, 퀴즈)
- BPTT에 대해 공부하면서 역전파 알고리즘에 대해 더 자세하게 공부할 수 있었다.
- 경사 하강법과 역전파의 수식적 이해를 높였다.
- pandas 사용법에 많이 알 수 있었다.
3. 참고할 만한 자료
4. 피어세션
- 서로 참고한 사이트 공유
- 필수과제 5에서 split()와 split(‘ ‘)의 차이점에 대해 논의
- 선택과제 2에 대해 많은 얘기를 했지만 해결하지 못했다. 주말을 이용해 공부 후 다시 논의
- 슬랙 채널을 활성화 하자!
- 자세한 내용은 Week1_day5 참조
5. 회고
- pandas에 대해 약간 헷갈리는 부분이 있지만 실습을 진행하면서 강의 영상을 참고하면 충분히 습득할 수 있을 것이라고 판단된다.
- RNN 부분과 확률론에서 어려움이 있었다. 주말과 부스트캠프 외적인 시간을 이용해서 추가적인 학습을 해야할 것 같다.