U_Week_1_Day_1

유영재·2021년 8월 2일

부스트캠프 AI_Tech

목록 보기
1/30
post-thumbnail

수업 정리  

강의 목록

[Python Basic for AI] Basic computer class for newbies

  • OS : 프로그램이 동작할 수 있는 구동 환경
  • File System : OS에서 파일을 저장하는 트리구조 저장 체계
  • File from wiki : 컴퓨터 등의 기기에서 의미 있는 정보를 담는 논리적인 단위로, 모든 프로그램은 파일로 구성 되어 있고, 파일을 사용
  • Console : Terminal, CMD 라고도 불리며, GUI와 달리 텍스트를 사용해 컴퓨터에 명령을 입력하는 인터페이스 체계

[Python Basic for AI] 파이썬 개요

  • 플랫폼 독립적 인터프리터 언어로, OS와 상관 없이 사용 가능하며, 코드를 바로 실행 가능하다.
  • 객체 지향 동적 타이핑 언어로, 실행 순서가 아닌 단위 모듈(개체) 중심으로 프로그램을 작성하고, 프로그램이 실행하는 시점에 데이터에 대한 타입을 결정한다.

[Python Basic for AI] 파이썬 코딩 환경

  • 기존 개발환경에서 vscode로 전환

[Python Basic for AI] Variables

  • 변수 : 데이터를 저장하기 위한 메모리 공간의 프로그래밍 상의 이름으로, 메모리 주소를 갖고 있고 변수에 들어가는 값은 메모리 주소에 할당
  • 패킹 : 한 변수에 여러 개의 데이터를 넣는 것
  • 언패킹 : 한 변수의 데이터를 각각의 변수로 반환하는 것

[Python Basic for AI] Function and Console I/O

  • 함수는 어떤 일을 수행하는 코드의 덩어리로, 반복적인 수행을 1회만 작성 후 호출을 위해 사용되고, 코드를 논리적인 단위로 분리하는 기능을 갖는다.

[Python Basic for AI] Conditionals and Loops

  • 조건문은 조건에 다라 특정한 동작을 하게 하는 명령어로, 조건을 나타내는 기준과 조건의 참/거짓에 따라 실행해야 할 명령으로 구성된다.
  • 삼항 연산자 : 조건문을 하용하여 참일 경우와 거짓일 경우의 결과를 한줄에 표현
  • break : 특정 조건에서 반복 종료
  • continue : 특정 조건에서 남은 반복 명령 생략(pass와 같은 기능인가?)
  • else : 반복 조건이 만족하지 않은 경우, 반복 종료 시 1회 수행

[Python Basic for AI] String and advanced function concept

  • 문자열은 시퀀스 자료형으로 문자형 data를 메모리에 저장하며, 영문자 한 글자는 1byte의 메모리 공간을 사용한다.
  • 값에 의한 호출(Call by Value) : 함수에 인자를 넘길 때 값만 넘김. 함수 내에 인자 값 변경 시, 호출자에게 영향을 주지 않음.
  • 참조에 의한 호출(Call by Reference) : 함수에 인자를 넘길 때 메모리 주소를 넘김. 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨.
  • 객체 참조에 의한 호출(Call by Object Reference) : 파이썬의 함수 전달 방식으로, 전달된 객체를 참조하여 변경 시 호출자에게 영향을 주나, 새로운 객체를 만들 경우 호출자에게 영향을 주지 않음.

[AI Math] 백터가 뭐예요?

  • 벡터는 숫자를 원소로 가지는 리스트(list) 또는 배열(array)로, 공간에서 한점으로 나타내며, 원점으로부터 상대적 위치를 표현합니다.
  • 벡터에 숫자를 곱해주면 길이만 변하며(스칼라곱), 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈, 성분곱(Hadamard product)을 계산할 수 있으며, 두 벡터의 덧셈은 다른 벡터로부터 상대적 위치 이동을 표현합니다.
  • 벡터의 노름(norm)은 원점에서부터의 거리를 말하며, L1-norm은 각 성분의 변화량의 절대값을 모두 더해 계산하고, L2-norm은 피타고라스 정리를 이용해 유클리드 거리를 계산합니다.
  • norm의 종류에 따라 기하학적 성질이 달라지며, 머신러닝에선 각 성질들이 필요할 때가 있으므로 둘 다 사용합니다.
  • L1, L2-norm을 이용해 두 벡터 사이의 거리를 계산할 수 있으며, 두 벡터 사이의 거리를 계산할 때는 벡터의 뺄셈을 이용합니다.
  • 제 2코사인 법칙에 의해 두 벡터 사이의 각도를 계산할 수 있습니다.
  • 내적은 정사영(orthogonal projection)된 벡터의 길이와 관련 있습니다.
  • Proj(x)Proj(x)의 길이는 코사인 법칙에 의해 xcosθ∥x∥cosθ가 됩니다.
  • 내적은 정사영의 길이를 벡터 yy의 길이 y∥y∥만큼 조정한 값입니다.

[AI Math] 행렬이 뭐예요?

  • 행렬(matrix)은 벡터를 원소로 가지는 2차원 배열로, 행(row)과 열(column)이라는 인덱스(index)를 가지며, 행렬의 특정 행(열)을 고정하면 행(열)벡터라 부릅니다.
  • 벡터가 공간에서 한 점을 의미한다면 행렬은 여러 점들을 나타냅니다.
  • 행렬의 행벡터 xix_iii번째 데이터를 의미합니다.
  • 행렬의 xijx_{ij}ii번째 데이터의 jj번째 변수의 값을 말합니다.
  • 행렬끼리 같은 모양을 가지면 덧셈, 뺄셈을 계산할 수 있습니다.
  • 성분곱은 벡터와 똑같고, 스칼라곱도 벡터와 차이가 없습니다.
  • 행렬 곱셈(matrix multiplication)은 ii번째 행벡터와 jj번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산합니다. (numpy에선 @@ 연산을 사용한다.)
  • 넘파이의 np.inner는 ii번째 행벡터와 jj번째 행벡터 사이의 내적을 성분으로 가지는 행렬을 계산합니다(※수학에서 말하는 내적과는 다르므로 주의!).
  • 행렬은 벡터공간에서 사용되는 연산자(operator)로 이해합니다.
  • 행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있습니다.
  • 행렬곱을 통해 패턴을 추출할 수 있고 데이터를 압축할 수도 있습니다.
  • 어떤 행렬 AA 의 연산을 거꾸로 되돌리는 행렬을 역행렬(inverse matrix)이 라 부르고 A1A^{−1} 라 표기한다.
  • 역행렬은 행과 열 숫자가 같고 행렬식(determinant)이 0이 아닌 경우에만 계산할 수 있다. (numpy.linalg.inv로 구할 수 있다.)
  • 만일 역행렬을 계산할 수 없다면 유사역행렬(pseudo-inverse) 또는 무어-펜로즈(Moore-Penrose) 역행렬 A+A^+를 이용한다. (numpy.linalg.pinv 로 구할 수 있다.)
  • np.linalg.pinv를 이용하면 연립방정식의 해를 구할 수 있다.
  • np.linalg.pinv를 이용하면 데이터를 선형모델(linear model)로 해석하는 선형회귀식을 찾을 수 있다.
  • sklearn의 LinearRegression 과 같은 결과를 가져올 수 있다.

[AI Math] 경사하강법(순한맛)

  • 미분(differentiation)은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법입니다.
  • 미분은 함수 ff의 주어진 점 (x,f(x))(x, f(x))에서의 접선의 기울기를 구합니다.
  • 한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가하는지/감소하는지 알 수 있습니다.
  • 미분값을 더하면 경사상승법(gradient ascent)이라 하며 함수의 극대값의 위치를 구할 때 사용합니다.
  • 미분값을 빼면 경사하강법(gradient descent)이라 하며 함수의 극소값의 위치를 구할 때 사용합니다.
  • 경사상승/경사하강 방법은 극값에 도달하면 움직임을 멈춥니다.
  • 미분(differentiation)은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법입니다.
  • 벡터가 입력인 다변수 함수의 경우 편미분(partial differentiation)을 사용합니다.
  • 각 변수 별로 편미분을 계산한 그레디언트(gradient) 벡터를 이용하여 경사하강/경사상승법에 사용할 수 있습니다.

[AI Math] 경사하강법(매운맛)

  • 선형회귀의 목적식은 yXβ2∥y − Xβ∥^2이고 이를 최소화하는 ββ를 찾아야 합니다.
  • 이론적으로 경사하강법은 미분가능하고 볼록(convex)한 함수에 대해선 적절한 학습률과 학습횟수를 선택했을 때 수렴이 보장되어 있습니다.
  • 특히 선형회귀의 경우 목적식 yXβ2∥y − Xβ∥^2은 회귀계수 ββ에 대해 볼록함수이기 때문에 알고리즘을 충분히 돌리면 수렴이 보장됩니다.
  • 하지만 비선형회귀 문제의 경우 목적식이 볼록하지 않을 수 있으므로 수렴이 항상 보장되지는 않습니다.
  • 확률적 경사하강법(stochastic gradient descent)은 모든 데이터를 사용해서 업데이트하는 대신 데이터 한개 또는 일부 활용하여 업데이트합니다.
  • 볼록이 아닌(non-convex) 목적식은 SGD를 통해 최적화할 수 있습니다.
    SGD는 데이터의 일부를 가지고 패러미터를 업데이트하기 때문에 연산자원 을 좀 더 효율적으로 활용하는데 도움이 됩니다.
  • 확률적 경사하강법의 원리 : 미니배치 연산
  • 경사하강법은 전체데이터 D=(X,y)D=(X, y)를 가지고 목적식의 그레디언트 벡터인 θL(D,θ)∇θL(D, θ)를 계산합니다.
  • SGD는 미니배치 D(b)=(X(b),y(b))DD(b)=(X(b), y(b))⊂D를 가지고 그레디언트 벡터를 계산합니다.
  • 미니배치는 확률적으로 선택하므로 목적식 모양이 바뀌게 됩니다.
  • SGD는 볼록이 아닌 목적식에서도 사용 가능하므로 경사하강법보다 머신러닝 학습에 더 효율적입니다

과제

  • basic math
    - numpy 및 min, max 함수 등을 활용하여 해결
  • text processing-1
    - replace, split, join 함수 등을 활용하여 해결
  • text processing-2
    - text processing-1 문제와 유사하게 해결

피어세션 정리

  • 간단한 자기 소개 및 아이스브레이킹
  • 그라운드 룰 정리
  • 피어세션 운영 계획 수립
  • 조 이름 선정
  • 피어세션 진행을 위한 Github, Notion 생성

느낀점

기다리던 부스트캠프 일정이 시작되었습니다!!
처음으로 피어세션을 함께할 캠퍼 분들을 만나 앞으로의 진행 방향에 대해 정리해보았고, 다 같이 노력해서 목표하는 바까지 이뤘으면 좋겠습니다😊

예상보다 오픈된 강의 분량과 하루동안 진행해야할 학습량이 많아 당황했지만, 기초 단계이고 프리코스로 오픈된 내용이라 가볍게 들을 수 있었습니다.

ImageExample

0개의 댓글