부스트캠프 AI Tech 5기 1주차 [Python & AI Math]

README·2023년 3월 10일
0

부스트캠프를 시작하며

이번 주 월요일 드디어 부스트캠프 일정이 시작되었다. 합격을 하고 한 달 정도를 기다리는 동안 어떤 과정과 시련이 기다리고 있을지 많은 기대와 걱정을 안고 기다려왔었는데 이제 첫 발걸음을 떼게 되었다. 앞으로 어떤 일들이 생길지는 모르지만, 5개월 뒤에는 지금보다 훨씬 발전한 내가 되어있기를 바란다.

Python

1강

운영체제(OS): 운영체제는 우리가 컴퓨터를 사용할 때 우리가 우리의 작업에 집중할 수 있도록 메모리 관리, 프로그램 제어 등을 우리 대신 수행해주는 프로그램이다.
파일 시스템: 파일 시스템은 우리가 사용하는 파일을 보관하는 저장 체계로 트리구조를 하고 있으며 파일은 파일명과 확장자등으로 구분할 수 있고 파일을 열고 닫고 수정하고 저장할 수 있게 해준다. 파일 시스템을 사용하는 목적은 큰 용량의 저장소를 효율적으로 이용하고 저장장치들간의 속도차를 줄이는 것이다.

2강

변수: 어떠한 값을 저장하기 위한 자료구조로 값을 메모리 주소에 저장하고 변수에 메모리 주소를 저장하여 참조으로 수치형, 문자형, 논리형으로 저장할 수 있고 +.-,*,/ 등 다양한 연산이 가능함
리스트: 다수의 변수를 저장하고 관리할 때 사용하는 자료구조로 다른 언어와 달리 파이썬에서는 한 리스트 내에서 다양한 자료형을 사용 가능
함수: 어떤 기능을 사용할 때마다 구현하는 것이 아니라 특정한 이름으로 구현을 한 뒤 필요할 때마다 불러와서 사용할 수 있도록 하는 것
조건문: 기능을 구현할 때 상황에 따라 다른 행동을 해야 할 경우가 있는데 이때 상황별로 해야 할 행동을 지정해주기 위해 사용하는 것으로 조건과 조건에 따른 수행 사항으로 이루어져 있음
반복문: 프로그램에서 어떤 동작을 여러 번 반복해서 수행해야 할 때 사용하는 것으로 반복 횟수에 따라 수행하는 for 문과 반복 조건에 따라 수행하는 while 문이 있음, break나 continue 문을 통해서 일정 상황에서 반복문을 종료하거나 해당 수행을 넘겨버릴 수 있음

3강

스택: LIFO(Last In First Out) 구조의 데이터 구조로 가장 마지막에 삽입된 데이터를 가장 먼저 반환
큐: FIFO(First In First out) 구조의 데이터 구조로 가장 먼저 삽입된 데이터가 가장 먼저 반환
튜플: 리스트처럼 여러 개의 변수를 저장하는 데 쓰이짐나 리스트와 달리 값을 변경할 수 없는 데이터 구조
딕셔너리: 자바의 HashMap과 유사한 자료구조로 데이터 사이에 순서가 없고 Key:Value로 데이터를 저장하여 관리

4강

객체지향 프로그래밍: 위에서부터 순차적으로 진행되는 순차 지향 프로그래밍과 달리 클래스 단위를 통해서 객체를 구현하고 객체들의 역할과 상호작용을 통해 기능을 구현하는 방식(아직 이해가 부족해서 설명이 좀 이상하네요...)
클래스: 객체를 구현하는 단위로 변수와 함수를 가지고 클래스를 통해서 인스턴스를 생성 가능, 클래스의 특성은 상속, 다형성, 가시성이 있음
라이브러리: 다른 사용자가 구현해놓은 기능으로 필요할 때 불러와서 사용 가능함
모듈: 프로그램을 개발할 때 하나의 파일로 개발하면 코드가 너무 길어지고 알아보기 어려워짐->관리가 어려워짐, 그렇기 때문에 프로그램을 개발할 때 여러 모듈로 분리하여 개발(팀 활동을 할 때도 사용)
패키지: 모듈들을 합친것

5강

오류: 프로그램이 개발자의 의도와 다르게 잘못된 행동을 하는 것, 코드상의 오류일 수도 있고 사용하는 사람이 실수나 의도에 의해 발생할 수도 있음
예외 처리: 오류가 발생하는 것을 막기 위해 의도와 다른 상황이 발생했을 때 해야 할 일을 지정해주는 것, 파이썬에서는 try ~except 문을 사용
파일 시스템: 파일을 저장하고 관리하기 위한 저장 체계로 트리 구조의 형태, 파일은 컴퓨터에서 정보를 저장하는 단위로 읽고 쓰고 수정할 수 있음
로그: 프로그램이 쓰는 일기장 같은 느낌으로 프로그램의 실행 과정을 기록으로 남기는 것, 로그를 활용하여 프로그램을 개선하거나 보완할 수 있음
파이썬의 데이터 입출력: 파이썬에서 csv, txt 등의 파일을 읽어오고 저장 가능, 웹상의 정보를 가져와서 활용할 수도 있음

6강

numpy: 파이썬에서 선형대수학의 수학적 기법을 이용하기 위해서 사용하는 라이브러리로 파이썬뿐만이 아니라 C언어, Fortran으로도 작성되어서 파이썬의 기본적인 기능들을 이용하여 계산을 수행하는 것에 비해서 훨씬 빠른 속도로 계산을 수행 가능
np.array: 넘파이에서 사용하는 array 형태의 자료구조로 파이썬의 리스트와 달리 한 개의 array에서 하나의 자료구조만 사용 가능, shape 함수를 통해서 array의 차원과 크기를 알 수 있음, 이외에도 다양한 수학적 연산 기능을 지원

7강

pandas: 파이썬에서 데이터분석을 하는데 활용되는 라이브러리
Series: array 형의 자료구조로 인덱스를 지정 가능, Series끼리 연산을 할때 하나하나 따로 해줄 필요 없이 index 기준으로 연산 수행
DataFrame: Series 자료형의 묶음으로 Series 하나당 한 개의 column에 해당하고 column을 삭제하거나 추가가 가능
pandas의 기능: describe(데이터 요약), sum(합연산), isnull(결측값 탐색) 등의 기능을 제공
Groupby: 특정 카테고리에 속하는 데이터들을 이용하여 연산을 수행할 때 이용하는 기능으로 특정 카테고리의 합이나, 평균 등을 추출가능하고 카테고리별 데이터의 특징 등을 알아보는 데 유용함
피벗테이블: 데이터를 카테고리별로 요약하는 기능으로 많은 양의 데이터에서 카테고리에 따른 특징을 알아보기에 유용
데이터 합치기: merge와 concat을 이용해서 데이터를 합칠 수 있음, merge는 SQL에서 사용하는 merge와 동일한 기능, concat은 단순히 데이터를 옆이나 아래로 이어 붙이는 기능

AI Math

1강

벡터: 선형대수학에서 공간에서의 위치를 숫자로 나타내는 것으로 차원의 크기에 따라 숫자들의 개수가 달라집니다. (1차원-1개, 2차원-2개, 3차원-3개...), 벡터는 상대적 위치를 표현합니다.
벡터의 덧셈과 곱셈: 형태가 같은 벡터끼리는 덧셈과 곰셈이 가능하고 방법은 같은 위치의 숫자끼리 각각 더하거나 곱하는 것입니다. 벡터의 뺄셈은 A+(-B)와 같은 방식으로 수행 가능합니다.
norm: 벡터의 거리를 의미하는 것으로 각 원소들의 절댓값의 합인 L1 노름과 유클리드 거리를 통해 계산하는 L2 노름 두 가지의 방식이 있습니다.
내적: 벡터의 내적은 두 벡터 사이의 각도를 Θ라고 할 때 abcosΘ{||a||*||b||*cosΘ}로 구할 수 있습니다.

2강

행렬: 벡터를 행과 열로 묶어놓은 것으로 공간에서 여러 점들의 위치를 나타냅니다.
행렬의 덧셈과 곱셈: 행과 열의 크기가 같은 경우 덧셈, 뺄셈, 곱셈이 가능하고 방법은 같은 위치의 숫자끼리 연산하는 것입니다.
행렬곱: 행렬의 행과 열의 내적을 성분으로 가지는 행렬을 계산하는 것으로 A행렬과 B행렬을 곱하기 위해서는 A행렬의 열 개수와 B행렬의 행 개수가 같아야 하고 이때 행렬곱의 크기는 A행렬의 행 개수*B행렬의 열 개수입니다.
전치행렬: 행렬의 행과 열을 바꾼 행렬로 ATA^T로 표기합니다.
역행렬: 역행렬이란 어떤 행렬 A와 곱했을 때 단위 행렬이 되는 행렬을 말하는 단어입니다. A1A^{-1}로 표기하고 역행렬이 존재하기 위해서는 행렬이 정방행렬이어야 하고 행렬식의 값이 0이 되어서는 안 됩니다.
유사 역행렬(무어-펜로즈 역행렬): 역행렬이 없는 행렬에서 사용하는 역행렬로 A+A^+로 표기하고 정방행렬이 아니어도 사용가능합니다.

3강&4강

경사하강법: 경사하강법은 인공지능의 학습 방법 중 하나로 미분을 이용하여 비용함수를 줄여나가는 방법이다. 미분을 이용하면 함수의 증가 방향을 알 수 있는데 이를 이용하여 가중치를 조절해가며 비용함수를 줄일 수 있다.
편미분: 만약 미분해야 하는 식이 한 개의 변수가 아닌 여러 개의 변수를 가질 때 사용하는 미분법으로 각 변수 별로 미분을 하는 방법입니다. 경사하강법에서는 편미분을 통해서 벡터를 이용가능합니다.
경사하강법의 단점: 경사하강법은 선형회귀에서 충분한 시간과 환경이 주어지면 최소 점에 수렴할 수 있습니다. 하지만 현실에서는 시간과 환경이 충분하지 않을 수도 있습니다. 또한 비선형회귀 형태의 문제도 있을 수 있는데 이때는 최소 점이 아닌 곳을 최소 점으로 착각하는 local minima 문제에 빠지게 될 수도 있습니다.
SGD(확률적 경사하강법): SGD는 경사하강법에 변화를 가한 방식으로 학습을 할 때 데이터의 일부만을 사용하여 학습을 하는 방식으로 모든 데이터를 사용하는 것보다 자원과 시간이 적게 들어갑니다. 또한 위에서 언급한 local minima 문제에 빠질 확률도 적어지기 때문에 더 좋은 성능을 보여줄 수 있습니다.

5강

신경망: 신경망은 두뇌의 뉴런들이 서로 연결되어 이루는 망을 지칭하는 말입니다. 딥러닝에서는 두뇌의 신경망을 모방한 인공신경망을 통하여 학습을 합니다.
활성함수: 활성함수는 입력된 신호를 출력신호로 변환하는 함수로 일정치 이상의 값이 입력되면 그에 따라 계산된 값을 출력합니다. 활성함수의 종류에는 tanh, 시그모이드, ReLU가 있고 현재는 기울기 소실 문제를 피하고자 ReLU함수가 가장 널리 쓰이고 있습니다.
다층 퍼셉트론: 다층 퍼셉트론은 단층 퍼셉트론의 단점을 보완하기 위하여 퍼셉트론을 층으로 쌓은 것으로 단층 퍼셉트론에서는 해결할 수 없었던 XOR 문제를 해결하는 모습을 보여주었습니다. 다층 퍼셉트론은 층이 깊어질수록 필요한 뉴런의 숫자가 줄어들어서 효율적으로 활용이 가능합니다.
역전파 알고리즘: 역전파 알고리즘은 다층 신경망에서 역방향으로 학습을 진행하며 오차를 줄여나가는 학습 방법으로 미분의 연쇄법칙을 통해 복잡한 계산을 수행합니다.

6강

딥러닝에서의 확률론: 딥러닝은 확률론에 바탕을 두고 있고 오차의 분산과 예측의 불확실성을 최소화하려면 확률론이 필요함
확률분포: 전체 확률에서 어떤 값이 나올 확률이 얼마인지에 따라 분포한 모양으로 이산형 분포와 연속형 분포가 있다. 이산형 분포에는 이항 분포, 다항 분포, 포아송 분포 등이 있고 연속형 분포에는 균등분포, 정규분포 등이 있다. 이산형 확률분포에서는 가능한 경우의 수 별로 각각 어느정도의 확률을 가지는지를 통해 나타내고 연속형 확률분포에서는 일정 범위의 값이 나올 확률이 어떻게 되는지를 나타낸다.
조건부확률: 조건부확률은 어떠한 조건 하에 어떤 일이 일어날 확률로 P(A|B)의 형태로 표기합니다. P(A|B)는 B라는 일이 발생했을 때 A가 일어날 일의 확률입니다.
몬테카를로 샘플링: 확률분포를 알아내기 위한 방법으로 무수히 많은 횟수의 무작위 연산을 수행하여 확률분포의 넓이를 알아내는 방법이다. 예를 들어 어떤 한 방의 어느 위치에 원을 그려놓고 방 안의 아무 위치에나 동전을 던졌을 때 방 안에 있는 사람이 동전이 원 안에 들어갔는지 들어가지 않았는지를 말해주는 일을 무수히 많이 반복하다 보면 방 밖에 있는 사람은 원을 보지 않고도 방에서 원이 차지하는 비율을 알 수 있다는 것이다.(제가 이해한 대로 적긴 했는데 이게 맞는지 모르겠네요...)

7강

모수: 어떤 데이터에서 모든 데이터의 집합을 모집단이라 하고 모집단의 특징을 나타내는 것을 모수라 하고 모평균, 모분산, 모표준편차 등이 있습니다.
최대가능도 추정법: 모수를 추정하는 방법으로 MLE라고 부르고 연산의 효율을 위해서 로그를 사용합니다.

8강

베이즈 통계학: 어떤 조건하에서 어떤 일이 일어날 확률을 계산하는 방법으로 단순히 조건부 확률을 계산하는 방법이 아니라 추가적인 정보를 통해 확률을 갱신해나갈 수 있습니다.
Confusion Matrix: 분류 알고리즘의 성능을 확인할 수 있는 표로 참이라고 예측했고 참인 경우(True Positive), 참이라고 예측했고 거짓인경우(False Negative), 거짓이라고 예측했고 참인 경우(False Positive), 거짓이라고 예측했고 거짓인 경우(True Negative)로 나타냅니다.

9강

Convolution 연산: 입력된 데이터를 커널을 통해서 증감시키고 정보를 추출하는 것으로 이미지 처리, 음성 처리 등에서 많이 이용됩니다. Convolution 연산에서는 커널을 이동시키며 입력데이터에 적용합니다.
다양한 차원에서의 Convolution: Convolution 연산은 다양한 차원에서 사용가능하며 입력데이터의 차원이 늘어나면 커널의 차원도 늘어난다.
Convolution 연산의 역전파: 학습 과정에서 역전파의 계산 과정에서도 Convolution 연산이 활용됩니다.

10강

시퀀스 데이터: 순서가 있는 데이터로 시계열 데이터와 텍스트 데이터 등이 존재
RNN: 은닉층에서 출력된 값이 다시 은닉층으로 돌아가서 연산을 수행하는 순환형 학습방식으로 순서가 있는 시퀀스 데이터의 학습에 적합합니다. 역전파 학습 과정에서 기울기 소실 문제가 발생할 수도 있습니다.
BPTT: RNN의 학습에 사용되는 알고리즘으로 어느 한 시점에서의 에러를 처음까지 전파하여 학습하는 방법입니다.

학습회고

분명히 한 주 동안 강의를 들었는데 내가 강의를 제대로 이해한 것인지 모르겠다. 특히 수학 관련된 부분에서 많은 어려움이 있었는데 조금씩 시간을 내서 수학 공부도 해야 할 것 같다. 사실 학습 내용을 정리하면서도 기억이 나지 않는 부분이 많아서 자료를 참고하였고 글을 쓰면서도 내가 이해한 내용이 제대로 이해한 게 맞나 싶은 생각이 계속해서 들었다. 아직 학습 내용의 정리를 어떻게 해야 할지도 감이 제대로 안 잡히고 여러모로 정신없는 한주였던 것 같다.

피어세션

부스트캠프 과정의 특징 중 하나인 피어세션을 경험해보았는데 이런 경험이 처음이다 보니 상당히 헤맸던 것 같다. 사실 지금까지 혼자 공부를 해오다 보니 함께 공부할 사람이 있으면 좋을 것 같았는데 막상 해보니 뭘 어떻게 해야 할지 모르겠는 느낌이었다. 다행히 좋은 팀원들을 만났으니 다음주부터는 조금 더 적극적으로 참여하며 앞으로의 부스트캠프를 의미 있는 시간으로 만들어 가야겠다.

멘토링

부스트캠프의 또 다른 특징인 멘토링도 경험해보았다. 학교에서 교수님, 선배들에게 도움을 받을 때와는 뭔가 다른 느낌이었고 수강생들의 눈높이에서 최대한 많은 것을 알려주려 하시는 것 같았다. 매주 멘토링 시간을 통해서 도움을 받게 될 것인데 멘토님이 헛된 시간을 썼다고 생각하시지 않게 최대한 열심히 해야 할 것 같다.

다음주부터는

피어세션에서 다음 주부터 알고리즘 문제 풀이와 논문 읽어보기를 진행하기로 하였다. 쉬울 것 같지는 않지만, 이왕 부스트캠프에 들어왔으니 최대한 많은 것들을 경험해보고 싶기 때문에 열심히 해볼 생각이다. 이 외에도 할만한 것이 어떤 것이 있을지 주말 동안 고민해봐야겠다.

profile
INTP 개발자 지망생

0개의 댓글