[Boostcamp AI Tech] 1주차 Day 1 학습기록

bluegun·2021년 8월 2일
0

AI Tech 2기 활동

목록 보기
1/87

학습 내용

1. 벡터

  • 벡터 : 공간에서의 한 점을 의미, 원점으로부터의 상대적 위치

  • 숫자를 원소로 가지는 list또는 array로 표현가능

  • 벡터의 덧셈: 다른 벡터로 부터의 상대적 이동( x+y인 경우, 벡터 y로부터 상대적으로 x만큼 이동)

  • 백터의 뺄셈: -x 값을 더한 것으로 이해하면 쉬움, 두 벡터 사이의 거리를 의미.

  • norm : 원점으로부터의 거리

  • L1 norm, L2 norm 존재

  • L1 norm : 각 벡터 성분의 변화량의 절대값 ( ex. (1,2,3) -> 1+2+3 )

  • L2 norm : 유클리드 거리 ( ex. (1,2,3) -> sqrt(1^2 + 2^2 + 3^2) )

  • 왜 L1 norm, L2 norm을 따로 정의하나? : norm을 정의함에 따라 기하학적으로 성질이나 표현 방법이 달라지는데, 머신러닝에서
    각 성질들이 필요할 때가 있다. ex) L1 norm: Robust 학습, Lasso 회귀, L2 norm: Laplace 근사, Ridge 회귀

  • 벡터 사이의 거리 : 벡터의 뺄셈 활용, L1 norm, L2 norm 모두 해당

  • 벡터 사이의 각도 : 제2코사인 법칙을 통해 구할 수 있으며, 이를 위해 벡터 사이의 거리(x-y) 필요, L2 norm에서만 가능한 방법이다.

  • ||x||^2 + ||y||^2 - ||x-y||^2 / 2||x||||y||

  • 코사인 법칙 분자 부분을 쉽게 구하는 방법이 벡터의 내적.

  • 내적의 해석 : 내적은 정사영 된 벡터의 길이를 정사영 한 벡터의 길이만큼 조정한 값이다.( x를 y에 정사영한 길이 ||x||cosθ를 ||y||만큼 조정)

  • 내적은 두 벡터의 유사도를 측정하는데 사용 가능하다.

2. 행렬

  • 행렬 : vector를 원소로 가지는 2차원 배열

  • 전치행렬 : 열을 행으로, 행을 열로 바꾼 행렬 (n m 행렬 -> m n 행렬)

  • 행렬의 i행은 i번쨰 데이터로 이해하는 게 앞으로 좋을 것.

  • 행렬 곱셈은 numpy에서 @ 연산으로 표현가능하다. ( X @ Y )

  • numpy에서의 내적 : numpy.inner()

  • 주의할점 : numpy의 내적은 i번째 행벡터와 j번째 행벡터의 내적! ( 일반 행렬 곱셈이 i번째 행과 j번째 열벡터의 내적인 것과 다름)
    따라서, numpy에서 행렬곱셈을 구현하고자 하면, 행렬 X와 Y의 전치행렬을 곱하자.

  • 행렬을 벡터공간에서 사용되는 연산자로 이해하자 : 벡터에 행렬을 곱하면 다른 벡터가 나온다.

  • 행렬곱을 통해 벡터를 다른 차원으로 변환 가능 : 원래 n차원이던 벡터에 열이 m개인 행렬을 곱해 m차원으로 변환

  • 역행렬 : 행렬의 연산을 그대로 되돌리는 행렬, 행과 열의 개수가 같아야한다 ( n * n )

  • 역행렬을 계산할 수 없을 때 유사역행렬 또는 무어-펜로즈 역행렬 사용. (기계학습에서 많이 사용된다고 함)

  • numpy.linalg.pinv() 로 유사역행렬 사용가능

  • np.linalg.pinv() 활용 : 연립방정식 계산 ( n <= m인 경우, 식이 변수의 개수보다 작거나 같아야함 )

  • 활용2 : 선형회귀분석에서 좌표계에서 데이터를 나타내는 행렬을 X라 하면, X는 좌표계에서 보면 좌표계 위의 점의 집합이라 할 수 있다.

    이 때, 이 점들을 가장 잘 나타낼 수 있는 선을 Xβ라 하면, Xβ = y가 되도록 하면 β는 행렬 X의 벡터들을 가장 잘 표현하는 선이라 할 수 있다.

    하지만, 선형회귀 문제에선 거의 항상 데이터의 수가 파라미터의 수보다 많기 때문에(행의 수가 변수의 개수보다 많다) 그대로 유사역행렬을 사용할 수 없다.

    그렇기 때문에 Xβ = y 식의 정확한 값은 구할 수 없고, y에 최대한 가까운 값이 되도록 하는 β값을 구하는게 최선이다.

    따라서, y 대신 y의 L2-norm을 최소화 하는 β를 찾으면 y에 가장 근접하는 y-hat을 찾을 수 있다.

    이 때 β를 구하는데 X의 유사역행렬을 사용한다.

    이해가 좀 더 필요할 것 같다..

과제하며 배운 내용

  • 문자열 처리와 관련된 파이썬 함수가 많다는걸 다시 한번 느꼈다. 문자열 처리 기술은 항상 까먹지말고 익혀두자.

  • 다른건 몰라도 split(), join(), re.sub() 까지는 기억해두는게 좋을 것 같다.

  • in 구문(for .. in ..)에서 container는 set일 경우 O(1) 시간복잡도로 접근 가능하다. str이나 list는 O(n) 시간복잡도

피어세션

  • 오전 밋업때 정해둔 대로 과제에 대한 가능한 풀이나 접근 방법에 대해 의논하였다.
  • 첫날이니까 팀의 규칙을 간단히 정하고 협업툴(github, notion)을 설정하였다.

느낀점

  • 과제가 현재 팀원들 기준으로는 쉬운 편이었지만, 푸는 과정에서 더 좋은 접근방법이 없는지(오늘 경우는 자료구조나 알고리즘, 이미 정의된 함수) 팀원분들과 얘기를 많이 나누었고, 이 과정이 정말 재미있다고 느껴져서 부스트캠프에 참여한 보람이 있다고 생각했다.

  • 오늘 목표로 한 부분까지 강의를 듣지 못했다. 강의 듣고 정리하고 과제 다 하고 피어세션 전에 모르는 부분에 대한 질문을 준비하는게 생각보다 많이 빠듯했고, 내일은 최대한 효율적으로 피어세션 전에 준비를 다 마칠 수 있도록 노력해야겠다.

  • 팀 활동 너무 좋다. 팀원들도 너무 좋다. ㅋㅋ

0개의 댓글