부스트 캠프 AI Tech 2일차

김찬혁·2022년 1월 18일
0
post-thumbnail

오늘 새로 알게된 내용

  • 벡터의 노름
    - 벡터의 노름(normnorm)은 원점에서부터의 거리, 기호는 x||x||

    • L1L_1-노름은 각 성분의 변화량의 절대값을 모두 더한 값

      • x1=i=1dxi||x||_1 = \sum_{i=1}^d|x_i|
    • L2L_2-노름은 유클리드 거리. norm은 임의의 차원 d에 대해서 성립하는 것을 명심

      • x2=i=1dxi2||x||_2 = \sqrt{\sum_{i=1}^d|x_i|^2}
    • #L1-노름
      def l1_norm(x):
          x_norm = np.abs(x)
          x_norm = np.sum(x_norm)
          return x_norm
      
      #L2-노름
      ##L2-노름은 np.linalg.norm을 이용해도 구현 가능
      def l2_norm(x):
          x_norm = x*x
          x_norm = np.sum(x_norm)
          x_norm = np.sqrt(x_norm)
          return x_norm```
      
  • 행렬의 연산 주의
    - 행렬의 곱은 항상 행 벡터와 열 벡터 사이의 연산
    - numpy에서 @ 연산(행벡터 x 열벡터) != np.inner 내적(행벡터 X 행벡터)

  • 유사역행렬
    - 행과 열이 달라 역행렬을 구할 수 없을 때 사용

    • 연산을 되돌린다는 개념으로 접근하게 되면, 유사 역행렬(pseudo-inverse) 또는 무어 펜로즈(Moore-Penrose) 역행렬 A+A^+를 이용
    • 역행렬과 완전히 같지 않지만, 유사한 기능을 하는 유사 역행렬을 구할 수 있음
    • 단 행(nn)과 열(mm)의 개수에 따라 계산 방식이 달라짐
      1) n>=m,A+=(ATA)1AT,A+A=In>=m, A^+ =(A^T A)^{−1} A^ T , A^+ A=I만 성립
      2) n<=m,A+=(ATA)1AT,AA+=In<=m, A^+ =(A^T A)^{−1} A^ T , AA^+=I만 성립
  • 활성 함수
    -activation function(활성함수)은 R 위에 정의된 비선형(nonlinear) 함수로서 딥러닝에서 매우 중요한 개념
    - 활성화 함수를 쓰지 않으면, 딥러닝은 선형 모델과 차이가 없음
    -시그모이드(sigmoid) 함수나 tanh 함수는 전통적으로 많이 쓰이던 활성화 함수지만 딥러닝에선 ReLU 함수를 많이 쓰고 있음
    -sigmoid는 어려번 사용하게 될수록 결국 값이 0으로 수렴하게 되는 문제가 있음, 따라서 이진 분류 문제에서 최종 확률값을 출력해주는 방식으로만 쓰임
    -tanh는 RNN model에서 쓰임(LSTM, GRU)
  • softmax
    -모델의 출력을 확률로 해석할 수 있게 변환해 주는 연산
    -분류 문제를 풀 때 선형모델과 소프트맥스 함수를 결합하여 예측
    -활성 함수 중 하나로, 이진 분류 이상의 결과를 해석할 때 사용
    -추론 시, 원-핫(one-hot) 벡터로 최댓값을 가진 주소만 1로 출력하는 연산을 하여 softmax로 출력

  • multi-layer perceptron
    -다층 퍼셉트론, MLP는 신경망이 여러 층으로 합성된 함수
    -입력부터 출력까지 순차적으로 신경망을 계산하는 것을 순전파(forward propagration)

  • 몬테카를로 샘플링
    -기계학습의 많은 문제들은 확률분포를 명시적으로 모를 때가 대부분이다
    -학률분포를 모를 때 데이터를 이용하여 기대값을 계산할 수 있다
    -몬테카를로는 확률변수 이산형 연속형에 상관없이 적용 가능
    -독립추출만 보장되면 대수의 법칙(law of large number)에 의해 수렴성을 보장한다

고민한 내용 및 결과

무어펜로즈 역행렬

역행렬을 구할 수 없기 때문에 유사한 기능을 하는 유사 역행렬을 대신 구했다. 행과 열의 대소에 따라 왜 계산방식이 달라지는가에 대해 고민했다. 그 이유는 비선형성 이라고 생각을 했다. 현재 AAmm차원에 속하는데 차원을 축소시켜야 한다. 그러기 위해선 n>=mn>=m인 경우는 AAs 의 좌측에서 곱해져야 A+AA^+A (mn)(nm)(m*n)*(n*m)
m x m 짜리 II(항등행렬)이 되는 것이다. 반대의 경우도 마찬가지다.

몬테카를로 샘플링
예제 : 함수f(x)=ex2f(x) = e^{−x2}[1,1][−1,1] 상에서 적분값을 어떻게 구할까?

1211ex2dx1Nf(x(i)),\frac{1}{2}\int_{-1}^{1}e^{− x2} dx ≈ \frac{1}{N}\sum f (x(i)), x(i)U(1,1)x(i) ∼ U (−1, 1)

import numpy as np

def mc_int(fun,low,high,sample_size=100,repeat=10):
    int_len = np. abs(high-low)			#밑변
    stat=[]					#결과값 리스트
    for _ in range(repeat):			#반복
    	x = np.random.uniform(low=low,high=high,size=sample_size)	#low high 에서 샘플 사이즈 개수만큼 랜덤으로 뽑음
        fun_x = fun(x)				#높이(y값)
        int_val = int_len * np.mean(fun_x)	#밑변 * 높이(모든 높이 요소들의 평균) => 랜덤만큼 뽑아서 나온 x가 만든 높이를 평균내서 해당 넓이를 알 수 있음
        stat.append(int_val)			#리스트에 담음 리스트에는 평균 넓이들이 계속 append 됨
    return np.mean(stat), np.std(stat)	#그 모든 넓이들의 평균과 표준편차를 구함

def f_x(x):
    return np.exp(-x**2)
    
print(mc_int(f_x,low=-1,high=1,sample_size=10000,repeat=100))
    

회고

캠프를 시작하고 이틀차가 되었다. 어제에 비해서 오늘은 확실히 잘 적응해 나가는 중이다. 이 과정이 힘들다는것을 알고 있었는데 점점 실감이 난다. 강의와 과제 퀴즈 그리고 이렇게 하루동안 배운 것을 기록하는 과정까지 잠 자는 시간 빼고 여기에 몰입하게 되는것 같다. 나한테 가장 어려운건 지금 이렇게 배운것을 기록하고 글을 쓰는것이다. 강의를 시청하는 시간의 배로 걸리고 내 언어로 정리하려니까 어려웠다. 나중에 다시 처음부터 봤을때 글이 엉망진창으로 느껴질 수도 있는데 처음부터 잘 하는게 어디 있겠나 생각하며 계속 적어나가 보겠다.

내일은 남은 AI math 강의 (6~10) 까지 듣고 퀴즈랑 과제 풀고 마무리 해야겠다.

0개의 댓글