Softmax와 Sigmoid 차이점?

Sung Daegyu·2024년 1월 15일
post-thumbnail

혼자 공부하는 머신러닝 + 딥러닝 📚

패션 mnist 데이터 셋을 통해 분류하는 과정을 공부했다.

<개발자를 위한 머신러닝&딥러닝>에서도 인공지능 도입부에 fashion_mnist 데이터를 사용했는데 비슷비슷 했다.

가장 기본적인 인공 신경망은 '확률적 경사 하강법을 이용하는 로지스틱 회귀'와 같다고 한다.


로지스틱 회귀란?

2d 상에서 classification을 가장 잘해주는 선형 함수를 찾는 것과 같다.

만약 다음과 같은 로지스틱 회귀 공식이 있다고 하자

z = w1 * x1 + w1 + x2 + ... + wn * xn + y
(x1, ... xn)은 주어지는 값이고 (w1, ... ,wn, y)는 변수이다.

z1=w1x1+w1+x2+...+w784x784+yz1 = w1 * x1 + w1 + x2 + ... + w784 * x784 + y
mnist 데이터 셋은 28 * 28 = 784 픽셀이고 각 선형방정식이 (총 10개) 각 옷 class를 나타낸다고 하면, 선형 방정식의 결과값 (z1, ... z10)은 해당 클래스에 대한 예측값(확률값)으로 생각할 수 있다.

결과적으로 10개의 선형방정식은, 입력값이 784개이고 출력으로 10개의 뉴런을 가진 층과 같다고 볼 수 있다.

z1 = ...
z2 = ...
.
.
.
z10 = ...


인공 신경망에서 교차 검증을 사용하지 않는 이유

  1. 딥러닝 분야의 데이터셋은 충분히 크기 때문에 검증 점수가 이미 안정적이다.
  2. 교차 검증을 수행하기에는 훈련 시간이 너무 오래 걸리기 때문이다.

fashion_mnist 데이터만 보더라도 총 (70000, 784)의 데이터가 있는데, 이걸 10등분 해서 교차검증 한다고 하면... $7000910=630,0007000 * 9 * 10 = 630,000번의 계산이 필요하다.


활성화 함수에 대해 | softmax vs sigmoid

책에서 fashon mnist를 분류하기 위해 활성화 함수로 softmax를 사용했다.
10개의 분류, 즉 다중분류를 위해 softmax를 사용했다는데...

dense = keras.layers.Dense(10, activation='softmax', input_shape=(784,))
# 10개의 패션 아이템을 분류하기 위해 softmax 함수를 사용.
# 다중 분류에는 왜 soft-max 함수를 사용하는 걸까?
# 만약 이진 분류라면 sigmoid 함수를 사용
  • 다중 분류에는 왜 softmax를 사용하는 걸까?
  • 이진 분류에는 왜 sigmoid를 사용하는 걸까?

먼저 활성화 함수가 무엇일까?

  • 뉴런의 선형 방정식 계산 결과에 적용되는 함수
  • 위 예시에서 마지막 층 10개의 값에 대해 '한번 더' 계산하는 층으로 이해할 수 있다.

sigmoid

시그모이드 함수는 이진 분류에 이용되는 활성화 함수이다.

시그모이드는 다중 분류에서도 사용될 수 있는데, 폐 X-ray에서 질병을 판독하는 예시와 같이 하나의 독립적 분류값이 아닌 경우 (암, 결핵, 부종, 등등).

왜냐하면 sigmoid는 각각의 값의 합에 대한 제한 조건이 없기 때문에 (반대로 softmax는 합이 1이어야 하므로, 한 값이 커지만 다른 값들은 작아져야 함) 값들 사이에 상호 연관성이 없고, 독립적이다.

softmax

소프트맥스 함수는 다중 분류에 사용되는 활성화 함수이다.

시그모이드와 달리 다중 분류에서 하나의 독립적인 값을 분류하는 경우에 사용된다. (mnist에서 손글씨 숫자를 분류하는 경우)

sigmoid와 softmax를 더 알아보고 싶다면 다음 링크를 참고.

Sigmoid vs Softmax


loss 함수에 대해

model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')

이진 분류와 다중 분류에 사용되는 loss 함수

  • 이진 분류: loss = 'binary_crossentropy'
  • 다중 분류: lostt = 'categorical_crossentropy'

그러다면 'sparse_categorical_crossentropy'는 무엇이지?

  • 원 핫 인코딩을 자동으로 해주는 Loss function!
  • 정수로된 타깃값을 사용해 크로스 엔트로피 손실을 계산하는 것이 바로 'sparse_categorical_crossentropy'
  • 빽빽한 배열 말고 정수값 하나만 사용한다는 뜻에서 sparse라는 이름이 붙음.
  • 만약 타깃값을 정수가 아닌 원-핫 인코딩으로 준비했다면 'categorical_crossentropy'로 지정

출처

profile
대규의 개발로그

0개의 댓글