Deep Learning Introduction(CS230)

서동현·2023년 1월 1일
0

Stanford University의 CS230 Deep Learning 강의내용을 포함하여 정리합니다.
이론은 많이 알고 있는 상태이기 때문에, 약간의 이론과 함께 Framework에 집중합니다.

What is Deep Learning?

Maximize Expected Utility
인공지능의 목적은 모델로부터 기대되는 문제해결능력을 최대화 하는 것이다.
그래서 AI는 Computional Rationality, 합리성을 계산하는 것이다

Rationality,합리성은 과정이 어떻든지
결과가 목표에 가장 근접했는지를 의미하는 것이고,
결과가 목표에 가장 근접하도록 계산하는 것이 인공지능 모델의 문제 해결능력을 최대화 하는 것이다.
인공지능 모델의 문제해결능력을 최대화 하는 것은
인공지능 모델의 추론결과의 오차(Loss, Cost)를 최소화 하는 것과 같다.

기대되는 문제해결능력은 Utility의 기댓값을 의미한다.
모델의 성능은 매번 실행할 때마다 다르기 때문에 Expected Utility를 기준으로 모델의 성능을 가늠한다.




출처 : https://www.advancinganalytics.co.uk/
인공지능 모델이 많은 데이터를 다루게 되면서 ML한계를 극복할 Neural Network가 나오게 되었고,
점점 더 많은 Neural Network의 파라미터를 학습시켜 Big Data에 대응하게 되었다.

Why Deep Learning?

세상에 존재하는 아주 다양하고, 많은 데이터를 이용해서 현실의 문제들을 해결해 비즈니스 가치를 창출하자.

딥러닝의 입력이 될 수 있는 다양한 데이터
출처 : https://www.ddaily.co.kr/


딥러닝의 입력이 될 수 있는 많은 데이터
출처 : 카카오 브레인



Contents

1. Difference among programs, ML and DL

Programs

현실의 데이터가 가질 수 있는 경우의 수를 '1이면 더하라' 식의 조건문으로 처리한 소프트웨어
현실의 데이터가 가지는 무수히 많은 경우의 수를 모두 고려하여 프로그램을 작성할 수 없다.

Machine Learning

과거의 데이터로 확률, 통계의 방법을 통해 문제해결능력을 확보한 소프트웨어
확률, 통계 방법 덕분에 일일이 조건문을 작성하지 않아도 되지만,
여전히 현실의 다양하고 많은 데이터를 통해 문제를 해결하는데 한계가 있다.

Deep Learning

Neural Network을 이용해 다양한 데이터, 많은 데이터를 학습하여 문제해결능력을 확보한 소프트웨어
Neural Network를 사용하는 모든 머신러닝의 문제들을 DL로 해결할 수 있다.
ReLu function을 activation으로 사용한 Neural Network을 이용해
다양하고 복잡한 데이터에 대응할 수 있지만,
데이터가 많을 수록 학습해야할 파라미터 수가 많아지고,
많아진 파라미터 수는 학습 시간, 추론시간, 컴퓨팅 비용을 더 많이 필요로 한다.

2. Category of ML/DL

  • Supervised Learning

    미래 패턴의 특성을 예측하는 것이 목표.
    Predict some property of future pattern

    • 지도학습으로 풀고자하는 main problem
      • Classification(분류) : 상태를 예측하는 문제, (Discrete Value, digital)
      • Regression(회귀) : 숫자를 예측하는 문제, (Continuous Value, analog)
  • Unsupervised Learning

    숨어있는 Parameter, 데이터를 특징짓는 함수를 찾아내는 것이 목표.
    Infer underlying parameter or function characterizing data

    • 비지도학습으로 풀고자 하는 main problem, future observation과 관련이 없다.
      + 군집화(clustering): 확률분포의 특성을 파악하는 문제
      + 패턴 찾기(pattern search) : 데이터 스스로 자신의 구조를 파악하는 문제
      + 차원 축소(Dimension Reduction) : 데이터 스스로 자신의 구조를 파악하는 문제

      낮은 차원의 데이터 구조를 추출해내는 것이 목표.
      Extract a low dimensional structure of data

  • Reinforcement Learning

    이득을 최대화하는 행동을 선택하는 것이 목표
    Select an action to maximize a payoff

    • Q Learning
    • Deep Q Learning Network


Written by @NOELlIAGOROD
3. Loss Fuction(Cost Function)

  • Regression문제에서 Loss Function

    Loss=추론정답Loss = 추론-정답

  • Classification문제에서 Loss Fuction
    CrossEntropyLoss=[맞을확률log(맞을확률)틀릴확률log(틀릴확률)]Cross-Entropy Loss = -[맞을 확률*log(맞을확률)-틀릴확률*log(틀릴확률)]

4. Gradient Descent
최적화
파라미터를 어떻게 수정할래?
어떻게 정답으로 나아갈래?
5. Deep Learning Library
tensorflow
google이 딥러닝의 문을 열었다.
learning curve가 높다
pytorch
pythonic하다.
High level
연구자들에게 적합
keras 아주 쉽게 해놓음
tensorflow 2.0
keras 표현법을 가져와서 learning curve가 높은 tensorflow 1.0의 단점을 보완하였다.



Keras 덕분에 Tensorflow 2.0은 초심자들이 접근하기 쉬워진 반면
Pytorch는 Training loop을 직접 결정해야해서 초심자들에게 적합하지 않다.
전체 프로세스를 조율할 수 있는 연구자라면 Training loop을 직접 결정할 수 있는 것은 좋다.
Tensorflow 2.0도 Training Loop을 Pytorch처럼 직접 결정할 수 있지만,
더 pythonic한 framework은 pytorch다.

tensorflow 1.0이 Neural Network를 학습하기 위해서는
Computational Graph를 만들고, 다음 세션 안에 넣어줘야 했다.

import tensorflow as tf

# Tensorflow 1.x

x = tf.constant([1., 2., 3.]) # Define a tensor x
y = tf.constant([4., 5., 6.]) # Define a tensor y

add_op = tf.add(x,y) # Add operation
with tf.Session() as sess: #create a session
    result = sess.run(add_op) # run the session

print(result) # [ 5.,7., 9.,]

tensorflow 1.0은 마치 java같은 언어처럼 코딩해야했고, 컴파일없이 테스트할 수 없었다.
tensorflow 2.0부터는 획기적으로 pythonic 해졌지만, 여전히 pytorch보다는 못하다.

import torch
import numpy as np
import tensorflow as tf

"""
Tensorflow 2.0이 pythonic하지만, 여전히 Pytorch, Numpy랑 차이를 보이는 부분
"""
torch.tensor([1,2,3])
np.array([1,2,3])
tf.constant([1,2,3])

# OUTPUT: [1,2,3]

torch.ones(5)
np.ones(5)
tf.ones(5)

# OUTPUT: [1, 1, 1, 1, 1]

torch.zeros(5)
np.zeros(5)

# OUTPUT:[0, 0, 0, 0, 0]

t = torch.tensor([[1,2,3],[4,5,6]])
n = np.array([[1,2,3], [4,5,6]])

t.flatten()
n.flatten()

# OUTPUT:[1, 2, 3, 4, 5, 6]
# No TF equivalent

np.arange(4)
torch.arange(4)
tf.range(4) # slightly different from numpy

# OUTPUT: [0,1,2,3]
"""
Tensorflow 2.0의 Tensor가 Immutable한 부분
"""
n = np.array([1,2,3,4])
p = torch.tensor([1,2,3,4])
t = tf.constant([1,2,3,.4])

print(n[0]) # output: 1
print(p[0]) # output: 1
print(t[0]) # output: 1

n[0] = 2 # n = [2,2,3,4]
p[0] = 2 # p = [2,2,3,4]
t[0] = 2 # TypeError

pytorch가 GPU에서 연산을 한다는 것과, automatic diffrential(자동 미분 기술)을 수행할 수 있다는 점을 제외하고 Numpy와 완전히 같은 반면,
Tensorflow 2.0은 tf.constant로 정의되는 tensor가 불변성(immutable)을 가진다는 점에서
여전히 pytorch와 Numpy와 다르고, Pythonic하지 않은 지점을 갖는다.
https://dev.to/eteimz/here-is-why-pytorch-is-more-pythonic-than-tensorflow-2oee
6. 인공지능 모델 분류
1년에도 수천개씩 모델이 새로 나오기 때문에 모든 모델을 다 깊이 이해할 수 없다.
그래서 아래와 같이 모델을 분류하면 새로운 모델을 사용할 때 필요한 이해를 갖출 수 있다.

  • 데이터 분포가 가정되어 있는지
    • Generative : 데이터 분포가 가정되어있는 확률모델
    • Discriminative : 데이터 분포의 가정 없는 함수모델
  • 연산형태
    • Linear : 중첩원리를 만족시키는 모델, 1차함수(y=axy=ax)
    • Non Linear : 중첩원리(superposition rule)을 만족시키지 않는 모델
  • 복잡도
    • Parametric : 데이터가 많아질수록 학습해야하는 Parameter 수가 증가하는 모델(NN)
    • Non Parametric : 데이터 크기에 관계없이 Parameter 수가 일정한 모델(NB)


요약



profile
AI 비즈니스 가치를 고민합니다.

0개의 댓글