1. 개요

  • 대다수의 사람들이 딥러닝 공부를 시작할 때 강의를 듣거나 책을 통해 예제를 보고 학습을 한다. 
  • 대부분의 강의나 책에는 "파이썬 기초부터 시작하는 딥러닝"이라 제목을 짓는 경우가 많은데 이런 경우 아무래도 한정된 시간과 분량으로 교육생들에게 파이썬에 대해 많이 강의해 줄 수 없다 보니
    딥러닝 예제에서 미리 준비된 데이터 셋이나 tensorflow의 경우 tensorflow dataset을 이용하는 경우가 많다. 
  • 이런 미리 준비된 데이터셋을 이용하는 방식은 아무래도 학생이 딥러닝의 확장성, 구조설계의 자유도에 대해서 체감하기 어렵다는 것이다. 
  • 개인적인 생각으로는 딥러닝에서 가장 처음에 생각 해야하는 것은 인풋과 아웃풋이다. "내가 무엇을 넣어서 무슨 답을 원하는가"이다. 
  • 딥러닝 알고리즘을 블랙박스라고 생각하고 그저 우리가 원하는 것은 인풋을 넣었을 때 내가 원하는 아웃풋이 나오게 만들고 싶다. 
  • 그러기 위해서는 가장 중요한 것은 데이터셋에 대한 이해와 출력에 대한 이해가 먼저 되어야 한다. 

 

2. 데이터셋 

  • 데이터셋은 여러가지가 있다. 숫자 또는 카테고리가 혼합된 형태 예를 들면 남자, 여자, 키, 몸무게 등이 있다. 남자, 여자는 카테고리이고 키, 몸무게는 숫자 데이터이다. 
  • 이미지 데이터가 있다. 강아지, 고양이, 송아지 
  • 시간에 따라 연속해서 나오는 시계열 데이터가 있다. 한국의 기온 정보 1월에서 12월까지, 우리집의 전기 사용량
  • 문자열 데이터가 있다. "안녕하세요. 저는 HOE입니다."
데이터의 종류 카테고리 숫자 이미지 시계열 문자열
데이터의 예시 ο 남자, 여자
ο O, X 
ο 스웨터, 티셔츠, 모자, 신발
ο 몸무게
ο  키
ο 전기세
ο 상품의 가격
ο 강아지
ο 고양이
ο 송아지
ο 매일저장된 한국의 기온정보

ο 몇년간 기록된 우리집 전기세 사용량
ο 안녕하세요. 저는 HOE입니다.
ο 너 밥 먹었어?
ο 오늘 점심은 뭐먹지?
데이터 형식 남자=0,여자=1 or 남자=[1,0] 여자=[0,1]
O=0, X=1, or O=[1,0], X=[0,1]
스웨터 = 0
티셔츠 = 1
모자 = 2
신발 = 3
int
float
uint(자연수) int or float
+
Time
안녕 = 0
저는 = 1
HOE = 2
너 = 3
밥 = 4
먹었어 = 5
? = 6
오늘 = 7
점심 = 8
뭐 = 9

위 표를 보면 데이터가 어떻게 되어있는지 알았으니 이제 해당 데이터를 딥러닝에 넣으면 된다 

 

3. 딥러닝의 인풋, 아웃풋

예시를 보며 천천히 어떻게 데이터가 들어가는지 보자 

 

ㄱ. 사람의 나이, 키, 몸무게, 성별, 자산을 가지고 인기가 있나 없나를 구분하는 예시를 해보자.

일단 나이, 키, 몸무게, 성별, 자산이 어떤 데이터 형식인지를 파악한다 

나이 = 숫자

키 = 숫자

몸무게 = 숫자

성별 = 카테고리

자산 = 숫자 

여기서 첫번 째 조건 모든 입력값은 숫자형이어야 한다

유일하게 카테고리 형식인 성별을 숫자형으로 변경하자 남자=0, 여자=1 

그렇게 된다면 이제 딥러닝에 입력되는 데이터의 모양은 나이=20, 키=180, 몸무게=75, 성별=0, 자산=10 이 된다 

이제 입력 딥러닝 그래프를 그려보자 입력은 병렬이다!

이제 출력을 생각해보자 인기가 있다. 없다 는 카테고리형 데이터 타입이다. 이런 경우 출력으로 생각할 수 있는 방법은 2가지가 있다. 하나는 0~1로 생각하는 것이고 또 하나는 0 또는 1로 생각하는 것이다 

그럼 이제 코드를 작성할 때는 어떻게 해야 하나? 

일단 들어가는 입력 데이터는 병렬이라고 말했다. 그럼 데이터가 병렬이 되어 한번에 같이 들어가려면 어떻게 해야 하나?

데이터를 같이 묶으면 된다 보통 행렬로 제작을 한다 

저런 python list를 구현하는 것은 어렵지 않을 것이다. 

인풋이 결정됐으니 아웃풋을 만들어보자 

위의 두 가지 상황에 다음과 같이 1차원 또는 2차원 행렬 형태로 만들 수 있다.

끝났다 이제 모델의 입력과 출력에 해당 형식을 지정해주면 된다 

입력 = 형식-(5)   = [20,180,75,0,10]

출력 = 형식-(1) = [0] 또는 (2) = [1,0]

 

아마 딥러닝을 조금 공부한 사람이라면 배치 사이즈(batch size)를 들어보았을 것이다. 

위의 예시는 batch size가 1일 때의 예시이다 그럼 batch size가 2이면 어떻게 넣을까? 

입력 = 형식-(2,5) = [[20,180,75,0,10], [30,160,45,1,20]]

출력 = 형식-(2,1) = (2) = [0,1] 또는 (2,2) = [[1,0], [0,1]]

그럼 batch size가 2일 때 그래프는 어떻게 그려질까? 

 

'Machine Learning > AI를 위한 수학' 카테고리의 다른 글

(4) - Norm  (0) 2021.06.12

인공지능의 기본인 Norm 이다 .

처음 Norm을 공부할 때는 L1, L2 Norm에 대해서만 알고있었다. 

그런데 Gradient Descent를 공부하니 L1,L2 Loss 가 나와서 둘이 같은것인줄 알았지만 달랐다. 

또 다른 말이 있다. L1 L2 regularization 이다. 

이렇게 앞에 L1 L2 는 같지만 뒤에 붙는 말이 다른 경우가 많다 그래서 Norm이란 무엇이고 각각이 어떻게 다른지에 대하여 정리하였다.

 

Norm 이란? 

백터의 크기 또는 길이를 측정하는 방법 

한 점에서 어떤 벡터까지의 거리를 구할 때 사용할 수 있다 

Linear regression을 예로 들면 어떤 Hypothesis H(x)와 실제 정답데이터까지의 거리를 측정하여 다음 Gradient Descent의 강도를 조절 할 수 있다. 

 

Norm 수식
출처 : http://taewan.kim/post/norm/

L1 Norm 

Manhattan Distance, Taxicab geometry라고도 불린다. 

L1 은 절댓값과 연관되어있다. 

위의 Norm 수식에 p=1 을 대입하여 보면     L1 = x의 모든 절댓값들의 합 이 된다 

 

L2 Norm 

Euclidean Norm 이라고도 불린다. 

L2 는 제곱과 연관되어있다. 

위의 Norm 수식에 p=2 를 대입하여 보면 L2 = x제곱의 모든 합에 제곱근 이된다. 

 

Maxium Norm (최대 놈)

Maxium Norm 은 위의 Norm 수식에 p --> 무한대 를 대입하여 보면 

L _inf = max(|x1|,|x2|,|x3|....|xn|)   백터 성분의 최대값을 구하게 된다 

 

 

 

Loss

loss 는 Hypothesis(가설)와 실제 데이터사이의 차이를 구하여 방정식에 적용하여 최대한 데이터와 가설과의 차이를 줄이기 위하여 사용된다.

 

L1 Loss 

실제 데이터와 가설과의 차이를 절대값을 통해 더한다  Least Absolute Deviations 라고도 한다 

데이터의 이상치가 있을 경우 L1은 L2보다 이상치에 영향이 적다 - 제곱근 때문 

 

 

L2 Loss 

실제 데이터와 가설과의 차이를 제곱을 이용하여 더한다 Least Square Error라고도 한다 

L2 Norm 과 다른점은 loss는 벡터 사이의 에러를 효과적으로 구하기 위한것이지 절대적으로 값을 구하자는게 아니다. 

그러므로 루트(제곱근)이 빠졌다. 

위의 그림은 L1 loss 와 L2 loss 로 생성될 수 있는 loss function의 모양중 하나이다.

L1은 절댓값을 이용하다 보니 특정 지점에서 선형적이지 않고 약간 뾰족한 모양이 만들어진다  비선형에는 미분을 적용할 수 없다  

L2는 제곱을 이용하다 보니 계속하여 선형적이다. 

그러므로 경사하강에서 미분을 적용해야할 때 L2가 더 효과적일 수 있다. (고유벡터 조심) 

 

 

L1, L2 regularization 

정규화는 overffiting을 방지하기 위한 중요한 기법이다. 

각 cost function에 정규화 항을 추가하여 더해준다 

각 loss function의 결과에 hyperparameter lambda를 곱해준 정규화 항을 더하였다 

 

 

 

a = [ 0.25, 0.25, 0.25, 0.25]

b = [ 0.5 0.5 , 0 ,0 ] 

일 때 두 벡터의 L1 norm 은 모두 1이 나온다. 

하지만 L2의 경우는 두 벡터의 결과값이 다르다 . 

 

제곱을 이용하는 L2 Norm의 경우 L2는 각 벡터에 대하여 unique한 값이 나오는 반면 L1은 경우에 따라 어떤 항이 없어도 같은 결과가 나올 수 있다. 

그렇게 L1 Norm 은 Feature selection의 효과가 있다 

만약 j(a) = 4a1 + 5a2 + a3  가 나왔을 때 L1 Regularization을 추가하면 a2 또는 a3 가 없어도 j(a)의 결과가 같은 값을 찾을 수 있다. 결과적으로 L1 Regularization 항이 1a1 - 5a2 - a3 가 되어도 j(a)의 결과가 같다면 결과적으로 j(a) = 5a1 이 될 수 있다. ( a2 와 a3 는 feature selection에 의해 사라질 수 있다)

 

 

 

 

 

 

 

 

 

 

참조

https://seongkyun.github.io/study/2019/04/18/l1_l2/"

http://taewan.kim/

 

'Machine Learning > AI를 위한 수학' 카테고리의 다른 글

(1) 딥러닝 구현 기초 - 데이터  (0) 2022.01.15

+ Recent posts