목차
1. 강의정리
1-1. AI Math - chap1. 벡터
1-2. AI Math - chap2. 행렬
1-3. AI Math - chap3. 경사하강법(순한맛)
1-4. AI Math - chap4. 경사하강법(매운맛)
2. 과제
2-1. Basic Math
2-2. Text Processing Ⅰ
2-3. Text Processing Ⅱ
3. 피어세션 정리
4. 데일리 회고

📜 강의 정리
[AI Math] Chapter1. 벡터가 뭐예요?
- 벡터란 숫자를 원소로 가지는 리스트 또는 배열이다

- 코드
import numpy as np
x = [1, 2, 3]
y = np.array([1, 4, 2])
- 공간에서의 한 점을 나타내고, 원점으로부터의 상대적 위치를 표현한다
- 벡터에 숫자를 곱해주면 길이만 변한다 - 스칼라곱
- 벡터간의 연산
- 같은 모양의 벡터끼리는 덧셈, 뺄셈이 가능하고, 상대적 위치 이동을 의미한다
- 같은 모양이면 성분곱(Hadamard product, ⨀, element-wise) 계산 가능
-
import numpy as np x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) print(x + y) # array([5, 7, 9]) print(x - y) # array([-3, -3, -3]) print(x * y) # array([4, 10, 18])
- 벡터의 노름
- 원점으로부터의 거리
- 표현 방법 : ‖ ‖
- 노름의 종류에 따라 기하학적 성질이 달라짐
- 종류1. L1-norm : 변화량의 절대값의 합
- 종류2. L2-norm : 유클리드 거리, np.linealg.norm을 이용하여 구현 가능
L1 노름, L2 노름 - 노름의 종류에 따라 기하학적 성질이 달라진다.

- 두 벡터 사이의 거리
- L1, L2-노름을 이용
- 벡터의 뺄셈을 이용, 거꾸로 해도 거리는 같다 ‖x - y‖ = ‖y - x‖

- 두 벡터 사이의 각도
- L2-노름만 가능!
- 제2 코사인 법칙 이용, 분자를 쉽게 계산하는 방법이 내적(np.inner, 2<x, y>)

-
-
import numpy as np def angle(x, y): v = np.inner(x, y) / (l2_norm(x) * l2_norm(y)) theta = np.arccos(v) return theta
-
[AI Math] Chapter2. 행렬이 뭐예요?
⦁ 행렬(matrix) : 벡터를 원소로 가지는 2차원 배열, 행벡터를 원소로 가짐
- 코드 : x = np.array([1, 1, 1], [2, 2, 2], [3, 3, 3])
- 규칙 1. 벡터는 소문자로, 행렬은 대문자로 표기
규칙 2. x(i, j)는 i행의 j열 (행 먼저)
⦁ 전치행렬(X.t) : 행과 열의 인덱스가 바뀐 행렬
⦁ 행렬의 덧셈, 뺄셈, 성분곱(⨀), 스칼라곱은 벡터와 동일
⦁ 행렬 곱셈 != 벡터 곱셈
- X와 Y의 X의 행벡터와 Y의 열벡터의 내적(곱의 합)
- X의 열의 개수와 Y의 행의 개수가 같아야 한다.
- numpy에서 행렬 곱셈 연산 기호 : @
- * np.inner 는 행벡터 사이의 내적을 계산 - X와 Y의 행의 개수가 같아야 함
⦁ 역행렬 : 행과 열 숫자가 같고 행렬식이 0이 아닌 경우에만 계산 가능
- 코드 : np.linalg.inv(X)
- X @ X(-1) = I (항등행렬 : 대각선이 1이고 나머지는 0에 가까운 수)
- 유사역행렬(Moore-Penrose) : 행과 열 숫자가 달라고 가능 X(+), np.linalg.pinv(X)
[AI Math] Chapter3. 경사하강법 순한맛
⦁ 미분 : 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구, 변화율의 극한
- 코드 : import sympy as sym
from sympy.abc import x
sym.diff(sym.poly(x**2 + 2*x + 3), x)
- 경사상승법 : 함수를 증가시키고 싶으면 x + f'(x)
- 경사하강법 : 감소시키고 싶으면 x - f'(x)
⦁ 변수가 벡터인 경우(다변수 함수)는 편미분을 사용
- e(i) 사용 : i번째 원소만 1이고 나머지는 0인 벡터
⦁ 선형회귀분석 : 무어펜로즈 역행렬 이용해서 선형회귀식 찾기
[AI Math] Chapter4. 경사하강법 매운맛
⦁ 경사하강법으로 선형회귀 계수 구하기
- 선형회귀 목적식 ||y-Xi||2 를 최소화하는 i 찾아야함
- 아래 계산식 손으로 유도해보기
- 경사하강법
⦁ 경사하강법
+ 볼록한 함수는 그레디언트가 최소점을 향한다
+ 적절한 학습률과 학습횟수를 선택했을 때 수렴이 보장
- 비선형회귀(non_linear) 문제의 경우 볼록하지 않을 수 있으므로 수렴이 보장 x
⦁ 확률적 경사하강법(Stochastic Gradient Descent)
- 모든 데이터를 사용해서 업데이트하는 대신 데이터 한개 또는 일부 활용하여 업데이트 : 미니배치 연산
- 볼록이 아닌(non-convex) 목적식은 SGD를 통해 최적화 가능
- 데이터의 일부를 가지고 파라미터를 업데이트 하기 때문에 연산자원을 효율적으로 활용하는데 도움
- 매번 다른 미니배치를 사용하기 때문에 곡선 모양이 바뀜 -> non-convex 문제 해결

👩💻 과제 수행 과정
[필수과제] 1. Basic Math
아래 같은 기본적인 기능 포함하는 함수 몇 개 짜는게 끝이라 크게 기억에 남는건 없었고, 기나긴 테스트 코드가 신기했다. assert와 raise로 함수 기능이 잘못 되어 있으면 Error를 발생하는데 신기했다.
greatest_number = None
if number_list:
number_list.sort()
greatest_number = number_list[-1]
return greatest_number
[필수과제] 2. Text Processing Ⅰ
이 문제도 크게 어려운 점이 없었다. NLP를 사용하기 전에 텍스트 형식을 맞춰주는 함수 몇 개를 작성했다. 문자열을 다룰 때는 split과 join이 자주 사용되는 것 같다. 자주 join 할 때 string.join(" ") 이런식으로 구분자와 문자열의 자리를 바꾸어서 작성하는 실수를 한다.
# 소문자
input_string = input_string.lower()
# 띄어쓰기
input_string = input_string.split()
# 띄어쓰기 한칸
normalized_string = " ".join(input_string)
[필수과제] 3. Text Processing Ⅱ
언더스코어 형식으로 작성된 문자열을 카멜 형식으로 바꾸는 함수를 작성하였다. "alreadyCamel", "TEST" 등의 원래 언더스코어 형식이 아니었던 문자열은 그냥 반환해야 하는데 이 처리를 안 해줘서 테스트 코드에서 계속 에러가 발생했었다. 이 문제로 고민을 했었는데, 아래 세 줄로 해결되어서 허무하면서도 문제 이해의 중요성을 깨달았다.
# already camel
if "_" not in underscore_str:
return underscore_str

🙋♀️피어세션
첫 날이라 강의 질문을 하기 보다는 그라운드룰을 정하고 피어규칙을 정하는 시간을 가졌다.
📍 조 이름 : AIGO(아이고)
📍 모더레이터/팀원
- 모더레이터 : 캠퍼 ID 순으로 매일 돌아가며 담당
- 팀원: 김서원(1), 김승훈(2), 김신곤(3), 박아멘(4), 심현덕(5), 이상원(6) <총 6명>
*( )가 순서
📍 피어세션 플랜
- 피어세션 시간: 월~금 4:30pm~6:00pm
- 피어세션 장소: Online ZOOM
- 피어세션에서 할 것:
1) 일주일 과제 및 강좌 스케줄링
2) 수업 복습 (퀴즈 오픈일에 맞춰서 해당 강의 듣고 내용 정리해서 공유)
3) 과제 이해 안 되는 부분 서로 질문
4) 코드 리뷰 : 과제 제출 후
-예시 (8/2 피어세션 스케줄링)
8/2(월) - 퀴즈 1, 2, 3~4강 + 필수 과제 Basic Math, Text Processing1, 2
8/3(화) - 퀴즈 5, 6강 + 필수 과제 Baseball, Morsecode
8/4(수) - 퀴즈 7, 8, 9강 + 선택 과제 Gradient Descent, Backpropagation, Maximum Likelihood Estimation
8/5(목) - 퀴즈 10강 + 선택 과제 계속
-각자 해야 할 것
1) 수업 정리 완성본 URL 또는 파일 제출 후 팀원에게 공유
2) 참고자료/토론주제/질문 가져오기
-모더레이터 할 것
1) 회의록 작성
2) 피어세션 회의록 업로드
3) 피어세션 진행자
4) 멘토님 약속 필요할 경우 contact
5) 그 외 추가적인 임무
-협업툴 : ZOOM(화상회의용), Github(코드리뷰), SLACK(데이터/문서 공유, 회의록 작성, 채팅용)
📍 피어 규칙
1) 호칭은 ~님!
2) 존댓말 사용하기
3) 피어세션에 참여 못할 경우 전날 자정 전까지 말하기
4) 무단불참/지각 1번째 기프티콘 (4시 30분 이후 참석)
5) 선택과제도 최선을 다해서 끝내기
📍 Github organization : https://github.com/aigoigo
💌 데일리 회고
프리코스로 제공되었던 강의가 이번주 강의여서, 이번주는 널널할거라고 생각했는데 오산이다ㅋㅋㅋ
원래 일정은 피어세션이 16시 30분부터 18시까지인데 오늘은 첫 날이라 팀원들과 오전에도 줌미팅을 했다
무엇보다 다른 캠퍼님들을 직접 만나고 대화하는 것을 걱정했는데 괜찮았다
겪어보면 별 것 아닌데, 지레 겁먹고 시도도 안 해보는 적이 많다.
부캠을 하는 동안 오늘처럼 걱정했던 일이 막상 해보면 별 일 아니라는 생각을 계속 하며 용기내는 연습도 해봐야겠다.
인공지능 관련 강의를 많이 들었서 다 안다고 생각했는데, 오늘 경사하강법에 대한 강의를 남에게 설명을 할 수 없었다. 같은 주제의 강의를 여러 개를 보면서 항상 새로움을 느끼는 건 분명 문제가 있는거다. 부캠을 하는 동안 듣는 강의는 120% 이해하기 위해 제대로 이해했는지 남에게 설명할 수 있을 정도로 공부를 해야겠다! 다행히 부캠이 강의를 듣고 이해 안된 부분을 다른 캠퍼님들에게 질문 할 수 있는 환경이 잘되어 있어서 좋다!!
평소였으면 10시면 자고 있었을텐데 부캠을 하려고 9시부터 눈이 떠져서 체크인을 하기 위해 대기했다. 이런 열정과 애정이 오래오래 지속되어서 쑥쑥 성장하고 싶다🌱
'TIL > Boostcamp AI tech' 카테고리의 다른 글
[Boostcamp] Week2 - Day6. Neural network :: seoftware (0) | 2021.08.09 |
---|---|
[Boostcamp] Week1 - Day5. 하루 정리 :: seoftware (0) | 2021.08.06 |
[Boostcamp] Week1 - Day4. 하루 정리 :: seoftware (0) | 2021.08.05 |
[Boostcamp] Week1 - Day3. 하루정리 :: seoftware (0) | 2021.08.05 |
[Boostcamp] Week1 - Day2. 하루 정리 :: seoftware (0) | 2021.08.05 |
댓글