Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

고양이는 털털해

SSACxAIFFEL 3주차 : 21' 01.18 ~ 01.22 ; loss functions 본문

공부/SSACxAIFFEL

SSACxAIFFEL 3주차 : 21' 01.18 ~ 01.22 ; loss functions

Attagungho 2021. 1. 22. 18:37

노드 별 사용한 loss 함수 차이

지금까지 한 노드에서 사용한 loss 함수들을 보니 wav 분석노드에서는 categorical cross entropy를, 작사, 가위바위보 이미지 판별에서는 sparse categorical cross entropy를, 감성 분석 노드에서는 binary corss entropy를 사용했다. 세개의 loss 함수의 차이는 무엇이고 왜 그렇게 사용했는지 궁금했다.
아무 것도 모르고 공부한 내용이라 틀린 것이 많을 수 있다. 나중에 배우면서 고치기로 하자.

차이점과 공통점

  1. 차이점
  • 텐서플로우 공식문서 ( binary, categorical, sparse categorical 를 찾아보니 각 손실함수 별로 언제 사용하는지 적혀있었다.
    • binary는 이름대로 정답 클래스가 2개인 이진분류에 사용하는 로스 함수이다.
    • categorical은 정답 라벨이 원핫 형태로 된 경우에 사용하는 로스함수이다. 생각해보니 wav 노드에서는 라벨을 원핫벡터로 변경했었다.
    • sparse categorical은 정답 라벨이 정수형태 인 경우에 사용하는 손실 함수이다.
  1. 공통점
  • 셋 다 끝이 cross entropy로 끝난다. cross entropy에서 뭔가 조금씩 바뀐 함수들이지 않을까?
    • 그럼 cross entropy는 뭐고 뭐가 어떻게 달라지는 걸까?

cross entropy

교차 엔트로피라고 하기도 한다. 정답의 엔트로피와 학습한 모델 예측의 엔트로피의 차이를 말한다. 로스 함수가 작아지도록 학습한다는 것은 정답의 엔트로피와 유사하게 예측하도록 학습한다는 얘기로 이해할 수 있다. 그럼 entropy는 무엇일까? entropy간의 차이는 어떻게 계산할까?

  1. entropy
  • 여기서 말하는 엔트로피는 정보 이론에서 나온 개념을 차용했다고 한다. 특정 확률분포에서 무작위로 선정된 사건을 전송하기 위해 필요한 비트수라고 하는데, 무작위로 선정된 사건의 정보량의 기대값이라고도 한다. 대체 무슨 말을 하는건지.
    • 나는 정보이론을 1도 모르니까 대충 이해한 것으로 얘기해 보자면, 같은 내용만 주구장창 가르치는 노드로만 된 aiffel이 있고 매번 다른 내용을 가르치는 aiffel이 있다고 하자. 새로운 노드를 접할 때마다 우리가 얻는 '정보'는 같은 내용만 가르치는 노드로만 된 aiffel에서 노드를 뽑을 때보다 매번 다른 내용을 가르치즌 aiffel에서 노드를 뽑아서 들을 때 더 많을 것이다.
    • 아무것도 모르는 상태에서 매번 같은 것만 배우면 처음에는 놀랍지만 그 노드가 반복될 수록 놀랍지도 않고 얻는 정보량도 적을 것이다. 반면 매번 새로운 것을 배우면 매 노드 별 얻는 정보량이 많을 것이다. 그래서 balanced probability distribution은 엔트로피가 높고 skewed probability distribution은 엔트로피가 낮다고 하는 것 같다.
    • 다시 말해, 확률이 높은 사건이 발생하면 정보량이 적고, 확률이 낮은 사건이 발생하면 정보량이 많다.
    • 정보량을 수식으로 표현하면
      $$ 정보량 = -log(특정\ 사건이\ 발생할\ 확률) $$
      $$ h(x) = -log(P(x)) $$
    • 정보량은 한 사건에 대한 값이니까 기대값인 엔트로피를 수식으로 표현하면
      $$ 엔트로피 = (그\ 사건이\ 발생할\ 확률 \times 그\ 사건의\ 정보량)을\ 합한\ 것$$
      $$
      \begin{align}
      H(X) &= \sum_{i=1}^{n}{P(x_i) \times -\log{P(x_i)} or \\
      H(X) &=- \int{p(x)\log{p(x)}} \\
      \end{align}
      $$
    • 엔트로피를 정보량의 합으로 정의한 곳도 있던데 뭐가 맞는지는 잘 모르겠다. 거기서는 수식을 이렇게 적었다.
    • $$ H(X) = -\sum_{i=1}^n{P(x_i) \times \log{P(x_i)}} $$
  1. cross entropy
  • 교차 엔트로피는 두 엔트로피를 비교한 것으로 이를 위해 모델이 예측한 값의 분포, 정답 값의 분포의 차이를 구해야 한다.
  • 두 확률분포의 차이는 Kullback-Leibler divergence 로 구한다.
    • $D_{KL}$으로 표현하는데 이건 그냥 풀잎에서 본 cs231n 강의에 나온 식에서 더 찾아보지는 않았다. 강의에서 쓴 P,Q를 한번 헷갈려서 헤맸더니 더 찾아볼 의욕이 안생겼다. 나중에 생각나면 찾아보자. 강의에서 나온 수식은
      $$D_{KL}(정답값\ 분포||모델\ 예측값\ 분포) = \sum_y{해당\ 사건의\ 정답값\ 분포에서의\ 확률 \times \log{\frac{해당\ 사건의\ 정답값\ 분포에서의\ 확률}{해당\ 사건의\ 예측값\ 분포에서의\ 확률}$$
      $$ D_{KL}(P||Q)= \sum_y{P(y) \log \frac{P(y)}{Q(y)}$$
    • 이 식을 전개하면
      $$
      \begin{aligned}
      D_{KL}(P||Q) &= \sum_y{P(y) \log \frac{P(y)}{Q(y) \\
      &= \sum{P(y)(\logP(y) - \logQ(y))} \\
      &= \sum{P(x)\logP(x)} - \sum{P(x) \logQ(x)} \\
      &= - \sum{P(x) \logP(x)} + (- \sum{P(x) \logQ(x)}) \\
      &= 정답값\ 분포의\ entropy + cross\ entropy
      \end{align}
      $$
    • 위에서 보고온 엔트로피의 정의에 맞추기 위해 부호를 바꿔주면, $D_{KL}$ 은 정답엔트로피 + 정답과 예측간 교차 엔트로피 값이 된다. 두 분포의 차이인 $D_{KL}$ 이 작아지려면 정답의 분포는 우리가 수정할 수 없으니 cross entropy가 작아지도록 예측 값의 분포를 수정해야 한다.

binary, categorical, sparse categorical의 차이

  1. binary cross entropy

    • binary는 발생 가능한 사건이 두개이다. 클래스는 0, 1로 예측할 수 있으며 아웃풋 레이어의 활성함수가 'sigmoid' 이다.
    • binary cross entropy를 손실함수로 썼던 감성분석 노드를 찾아보니 마지막 dense 층의 활성함수를 'sigmoid'로 지정했었더라. 두 사건 간의 확률 분포이니 sigmoid 함수로 확률분포 구성하는게 편할 것 같다고 생각했다.
    • 사건이 발생할 때와 발생하지 않을 때의 엔트로피를 더해서 구할 수 있으므로 수식은
      $$ binary cross entropy = - \sum_{i=1}^2{t_i \log(s_i) = -t_1 \log(s_1)-(1-t_1)log(1-s_1) $$
  2. categorical cross entropy

    • 여러 사건이 발생할 수 있으며, 클래스는 여러개다. 각 클래스별 교차 엔트로피를 더하는 것은 binary와 같으나 'sigmoid' 활성함수로는 발생할 사건이 많은 경우의 확률을 나타낼 수 없으니 이를 나타낼 수 있는 활성화 함수를 쓴다. 가위바위보 이미지 판별 노드는 모두 마지막 dense 층의 활성화 함수가 'softmax'였다.
      • softmax까지 쓰려니 진 빠진다. 이미 시간 많이 썼으니 다음에 정리하자. cs231n에 나왔으니 이거 정리하면서 쓰면 되지 않을까.
    • 이번 주에 진행한 wav, 스펙트로그램 분석, 작사가 만들기 노드에서는 마지막 층에서 활성함수가 'relu' 이거나 없었다.
      • 대신에 모델을 complie 하면서 loss 를 따로 지정했는데 wav 노드에서는 tf.keras.losses.CategoricalCrossentropy() 에서 작사가 노드에서는 tf.keras.losses.SparseCategoricalCrossentropy()에서 from_logits 인자를 True 로 줬다.
      • logit을 로지스틱 리그레션을 연상하고 오즈비 변환을 해서 시그모이드 형태로 만드는가 싶어서 헷갈렸는데 그 뜻이 아니라 손실 함수로 전달되는 값들이 normalize 되지 않은 값들이라고 알려주는 인자라고 한다. 확률 형태로 변환되지 않은 값들이니 softmax + cross entropy의 형태로 확률분포 형태로 변환해서 계산하라는 뜻이라고 한다.
  3. sparse categorical cross entropy

    • sparse 의 의미는 클래스가 정수형태로 표현되었기 때문에 붙는 이름 이라는 얘기를 읽었다. 정수니까 one-hot encoding으로 표현해야 해서 0값이 많은 sparse matrix로 표현할 수 밖에 없다는 것이다.
      • 정수 라벨을 케라스에서 알아서 원핫으로 바꾼 후 계산한다는 것이다.
    • 그런데 keras에서는 categorical cross entropy에 원-핫 라벨을 넣고 sparse categorical cross entropy에 정수 라벨을 넣으라고 되어있다는 반론이 달려 있었다.
    • tf.keras애서는 categorical cross entropy에서 원-핫 뿐 아니라 모든 확률분포 라벨에서 작동한다는 얘기가 있었다. 이건 나중에 시간 나면 해봐야겠다.

Thoughts

그 동안 정리를 대강 한거 같아서 각 잡고 정리해 봤는데 모르는 걸 어떻게든 메꿔가면서 정리해 보려고 하니 이 개념이 맞나 다시 찾아보고 또 다시 찾아보고 하면서 시간이 살살 녹는다.
매번 이럴 시간이 있을 것 같지는 않고, 지금도 노드 밀렸는데.
매일 작은 정리를 미리 해두고, 관심 가는 주제가 있으면 공부해서 적어보자.
틀린 내용이 있으면 누가 지적해주시면 감사합니다.
수식이 아예 안되다가 반만 작동한다. 너무 화난다. 

 


참고 자료

'공부 > SSACxAIFFEL' 카테고리의 다른 글

SSACxAIFFEL 5주차 : 21' 02.01 ~ 02.05  (0) 2021.02.05
SSACxAIFFEL 4주차 : 21' 01.25 ~ 01.29  (0) 2021.01.31
SSACxAIFFEL 2주차  (0) 2021.01.15
SSACxAIFFEL 1주차  (1) 2021.01.08
SSACxAIFFEL 1일차  (1) 2020.12.31