Skip to content
Home » 딥 러닝 Loss | ㄹㅇ 쉬운 딥러닝 3강 : 손실함수 (Loss Function) 로 컴퓨터에게 오차를 알려줘야함 인기 답변 업데이트

딥 러닝 Loss | ㄹㅇ 쉬운 딥러닝 3강 : 손실함수 (Loss Function) 로 컴퓨터에게 오차를 알려줘야함 인기 답변 업데이트

당신은 주제를 찾고 있습니까 “딥 러닝 loss – ㄹㅇ 쉬운 딥러닝 3강 : 손실함수 (loss function) 로 컴퓨터에게 오차를 알려줘야함“? 다음 카테고리의 웹사이트 kk.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: kk.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 코딩애플 이(가) 작성한 기사에는 조회수 21,124회 및 좋아요 258개 개의 좋아요가 있습니다.

Loss는 영어 단어로는 상실, 손실을 의미한다. 그리고 기계학습에서의 Loss는 어떤 학습된 모델을 실제 데이터에 적용했을 때 모델의 추정 오차로 인해 발생하는 손실을 의미한다.

Table of Contents

딥 러닝 loss 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 ㄹㅇ 쉬운 딥러닝 3강 : 손실함수 (loss function) 로 컴퓨터에게 오차를 알려줘야함 – 딥 러닝 loss 주제에 대한 세부정보를 참조하세요

근데 컴퓨터에게 오차를 최소화시키는 w값을 찾는다고 시키는게 머신러닝이랬는데
그럼 컴퓨터는 되물을겁니다. 오차가 뭐임?
그러니 오차가 뭔지 정의해보도록 합시다.
전체 강의는 https://codingapple.com 에서 이용가능합니다.
구독자용 10% 할인 코드 YT123

딥 러닝 loss 주제에 대한 자세한 내용은 여기를 참조하세요.

[인공지능] Loss가 더 작다고 Accuracy가 더 높은 것은 아니다.

[인공지능] Loss가 더 작다고 Accuracy가 더 높은 것은 아니다. jhlee508·2021년 3월 13일. 1. 딥러닝머신러닝인공지능. 1. 흔히 하는 착각.

+ 여기에 보기

Source: velog.io

Date Published: 7/14/2021

View: 785

[Deep Learning] 손실함수(Loss Function) 개념 – Hey Tech

AI & 빅데이터/머신러닝·딥러닝 … 손실 함수(Loss Function)는 지도학습(Supervised Learning) 시 알고리즘이 예측한 값과 실제 정답의 차이를 비교 …

+ 여기에 더 보기

Source: heytech.tistory.com

Date Published: 8/7/2022

View: 7669

[딥러닝] 목적/손실 함수(Loss Function) 이해 및 종류

목적/손실 함수(Loss Function) 이란? 딥러닝 혹은 머신러닝은 컴퓨터가 가중치를 찾아가는 과정이다. 일단 아래 예를 보도록 해보자.

+ 여기를 클릭

Source: needjarvis.tistory.com

Date Published: 5/23/2021

View: 128

0023 Loss & Metric – Deepest Documentation – Read the Docs

머신러닝의 최종 목표는 척도로 달성률을 표시하지만, 직접 척도를 낮추도록 훈련하는 것은 여러 가지 이유로 힘들기 때문에 손실을 줄이는 방향으로 훈련합니다.

+ 자세한 내용은 여기를 클릭하십시오

Source: deepestdocs.readthedocs.io

Date Published: 12/6/2022

View: 7610

[딥러닝] 손실함수 (loss function) 종류 및 간단 정리 (feat. keras …

손실 함수(loss function) 란? · 머신러닝 혹은 딥러닝 모델의 출력값과 사용자가 원하는 출력값의 오차를 의미 · 손실함수의 함수값이 최소화 되도록 하는 …

+ 더 읽기

Source: didu-story.tistory.com

Date Published: 3/2/2021

View: 1902

[딥러닝 시리즈] ② Loss 함수 설계하기 (1)

[딥러닝 시리즈] ② Loss 함수 설계하기 (1). LittleFox 2021. 5. 7. 18:52. 딥러닝 시리즈는 딥러닝 기본 개념을 복습하고, 심화 내용을 스터디하기 위해 시작한 …

+ 더 읽기

Source: littlefoxdiary.tistory.com

Date Published: 5/18/2021

View: 4210

[Deep Learning] 손실함수 – AI Platform / Web

손실 함수란 신경망이 학습 시 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 하는지를 알 수 있는 지표이다. 즉, 손실함수의 …

+ 여기에 보기

Source: han-py.tistory.com

Date Published: 12/25/2022

View: 7540

딥러닝 모델의 손실함수 – ratsgo’s blog

이번 글에서는 딥러닝 모델의 손실함수에 대해 살펴보도록 하겠습니다. 이 글은 Ian Goodfellow 등이 집필한 Deep Learning Book과 위키피디아, …

+ 더 읽기

Source: ratsgo.github.io

Date Published: 4/17/2021

View: 949

학습시 loss / val_loss가 비정상적으로 높을 때 – NISSO

학습을 시키다가 loss: 7548178870.4000 val_loss: 194597683200.0000 와 같이 … [모두를 위한 딥러닝] Lec 02 : Linear Regression의 Hypothesis와 …

+ 여기에 자세히 보기

Source: oniss.tistory.com

Date Published: 5/3/2021

View: 1258

주제와 관련된 이미지 딥 러닝 loss

주제와 관련된 더 많은 사진을 참조하십시오 ㄹㅇ 쉬운 딥러닝 3강 : 손실함수 (loss function) 로 컴퓨터에게 오차를 알려줘야함. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

ㄹㅇ 쉬운 딥러닝 3강 : 손실함수 (loss function) 로 컴퓨터에게 오차를 알려줘야함
ㄹㅇ 쉬운 딥러닝 3강 : 손실함수 (loss function) 로 컴퓨터에게 오차를 알려줘야함

주제에 대한 기사 평가 딥 러닝 loss

  • Author: 코딩애플
  • Views: 조회수 21,124회
  • Likes: 좋아요 258개
  • Date Published: 2020. 11. 6.
  • Video Url link: https://www.youtube.com/watch?v=_JOjr8tVLSU

[Deep Learning] 손실함수(Loss Function) 개념

728×90

반응형

💡 목표

손실 함수의 개념과 알고리즘 학습의 수학적 의미에 대해 알아봅니다.

1. 손실 함수의 개념

손실 함수(Loss Function)는 지도학습(Supervised Learning) 시 알고리즘이 예측한 값과 실제 정답의 차이를 비교하기 위한 함수입니다. 즉, ‘학습 중에 알고리즘이 얼마나 잘못 예측하는 정도’를 확인하기 위한 함수로써 최적화(Optimization)를 위해 최소화하는 것이 목적인 함수입니다. 그래서 손실 함수를 목적 함수(Objective Function)라고도 부릅니다. 이외에도 손실 함수는 분야에 따라 비용 함수(Cost Function), 에너지 함수(Energy Function) 등으로 다양하게 부르기도 합니다. 손실 함수를 통해 모델 학습 중에 손실(loss)이 커질수록 학습이 잘 안 되고 있다고 해석할 수 있고, 반대로 손실이 작아질수록 학습이 잘 이루어지고 있다고 해석합니다. 이처럼, 손실 함수는 알고리즘 학습의 길잡이 역할을 하는 중요한 역할을 담당합니다.

손실 함수는 성능 척도(Performance Measure)와는 다른 개념입니다. 성능 척도는 학습된 알고리즘의 성능을 정량적으로 평가하기 위한 지표로써 정확도, F1 점수, 정밀도 등이 있습니다. 즉, 성능 지표는 알고리즘의 학습이 끝났을 때 모델의 성능을 평가하기 위한 지표이기 때문에 알고리즘 학습 중에는 전혀 사용되지 않습니다. 반면, 손실 함수는 알고리즘 학습 중에 학습이 얼마나 잘 되고 있는지 평가하기 위한 지표입니다.

2. 알고리즘 학습의 수학적 의미

손실 함수를 중심으로 ‘알고리즘을 학습한다’의 의미를 수학적으로 알아봅니다. 먼저, 아래 수식을 살펴보겠습니다.

$$ \tilde{\theta} = \arg\min_{\theta}L(x, y; \theta) $$

수식 내 각각의 의미는 다음과 같습니다.

\(L\): 손실 함수

\(\arg\min\): arguments of minimum을 축약한 수학적 표현으로, 목적 함수를 최소화하는 입력값을 찾는 역할(목적 함수: \(L\))

\(x\): 학습 데이터의 입력값으로, \(x\)로 얻어낸 예측값(\(\hat{y}\))은 정답(\(y\))과 비교

\(y\): 학습 데이터의 정답

\(\theta\): 알고리즘 학습 시 사용되는 모든 파라미터의 벡터

\(\tilde{\theta}\): 추정된 최적의 파라미터

그림 1. 알고리즘 학습의 수학적 의미

알고리즘을 학습하는 것은 알고리즘이 예측한 값(\(\hat{y}\))이 정답(\(y\))과 최대한 근접하게 만드는 과정입니다. 즉, 위의 그림 1과 같이 학습 데이터(\(x\), \(y\))는 고정된 값이므로, 알고리즘 학습 시 사용되는 최적의 파라미터 \(\tilde{\theta}\)를 찾아 \(loss\)를 최소화하는 과정입니다.

📚참고할 만한 포스팅

“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”

손실 함수의 개념과 알고리즘 학습의 의미에 대해 알아봤습니다.

포스팅 내용에 오류가 있다면 아래에 댓글 남겨주시길 바랍니다.

그럼 오늘도 즐겁고 건강한 하루 보내시길 바랍니다 🙂

고맙습니다😊

728×90

반응형

손실 함수(Loss Function) 이해 및 종류

목적/손실 함수(Loss Function) 이란?

딥러닝 혹은 머신러닝은 컴퓨터가 가중치를 찾아가는 과정이다.

일단 아래 예를 보도록 해보자.

4 = 2a + b 6 = 3a + b

이와 같은 문제가 있다고 가정을 해보자, 사람들에게 a와 b에 들어가야 되는 답은 무엇인가? 라고 물어본다면

값을 대입해서 문제를 풀어본다던지 직관적으로 풀어본다던지 아니면 여러가지 공식을 써서 풀어본다던지

할 것이다. 2번과 3번과 같은 경우 컴퓨터에게 시키기에는 매우 힘든 작업이다. 반대로 값이 엄청 많을 경우 1번은 인간에게 힘들 수 있다. 물론 위의 문제는 너무 쉽기 때문에 값을 대충 대입해서도 충분히 맞출 것이다.

컴퓨터는 기본적으로 첫번째 방법인 값을 대입해서 문제를 풀어본다. 그래서 대입한 결과와 실제 정답간의 간격 즉, 차이를 최대한 줄이는 방향으로 값을 대입하게 된다. 이 값의 차이를 loss라고 하며, 이 loss를 줄이는 방향으로 학습이 진행이 된다.

손실함수의 종류

MSE(Mean Squared Error)

예측한 값과 실제 값 사이의 평균 제곱 오차를 정의한다. 공식이 매우 간단하며, 차가 커질수록 제곱 연산으로 인해서 값이 더욱 뚜렷해진다. 그리고 제곱으로 인해서 오차가 양수이든 음수이든 누적 값을 증가시킨다.

RMSE(Root Mean Squared Error)

MSE에 루트(√)를 씌운 것으로 MSE와 기본적으로 동일하다. MSE 값은 오류의 제곱을 구하기 때문에 실제 오류 평균보다 더 커지는 특성이 있어 MSE에 루트를 씌운 RMSE 은 값의 왜곡을 줄여준다.

Binary Crossentropy

MSE와 RMSE와 다르게 Crossentropy는 개념을 이해하기에 좀 시간이 걸릴 수 있고, 여기에 Crossentropy를 설명하는 것을 적어봤자. 갑자기 흥미가 뚝떨어질 수 있기 때문에 언제쓰며, 어떻게 사용하는지만 적도록 한다.

실제 레이블과 예측 레이블 간의 교차 엔트로피 손실을 계산한다. 2개의 레이블 클래스(0, 1로 가정)가 있을 때 Binary Crossentropy를 사용하면 좋다.

BinaryCrossentropy class

tf.keras.losses.BinaryCrossentropy( from_logits=False, label_smoothing=0, reduction=”auto”, name=”binary_crossentropy” )

Categorical Crossentropy

레이블 클래스가 2개 이상일 경우 사용된다. 보통 softmax 다음에 연계되어 나온다고 하여 softmax 활성화 함수 다음에 나온다고 하여 softmax loss 라고도 불린다.

CategoricalCrossentropy class

tf.keras.losses.CategoricalCrossentropy( from_logits=False, label_smoothing=0, reduction=”auto”, name=”categorical_crossentropy”, )

그외 손실함수들

https://www.tensorflow.org/api_docs/python/tf/keras/losses

에 들어가면, keras에서 사용하는 loss function 들을 확인할 수 있다.

#목적함수 #손실함수 #lossfunction

[딥러닝] 손실함수 (loss function) 종류 및 간단 정리 (feat. keras & pytorch)

반응형

시작하며

딥러닝모델 구축 도중 손실함수 때문에 오류가 났다. 아마 손실함수와 활성화 함수의 조합이 맞지 않았던 것 같다. 일단 그래서 이대로는 안되겠다 싶어서 자세한 수식까지는 아니더라도 언제, 어떻게, 무슨 종류의 손실함수가 있는지 살펴보기로 한다!!! 아자아자 화이팅 ⋌༼ •̀ ⌂ •́ ༽⋋

손실 함수(loss function) 란?

머신러닝 혹은 딥러닝 모델의 출력값과 사용자가 원하는 출력값의 오차를 의미 손실함수는 정답(y)와 예측(^y)를 입력으로 받아 실숫값 점수를 만드는데, 이 점수가 높을수록 모델이 안좋은 것

손실함수의 함수값이 최소화 되도록 하는 가중치(weight)와 편향(bias)를 찾는 것이 목표

파이썬에서 지원하는 다양한 라이브러리에서는 많은 손실함수를 지원한다. 해당 포스팅에서는 keras에서 존재하는 손실함수와, pytorch를 활용해서 손실함수를 살펴볼 것인데, 아래 공식문서에서 다양한 손실함수를 살펴볼 수 있다.

www.tensorflow.org/api_docs/python/tf/keras/losses

1. binary_crossentropy (이항 교차 엔트로피)

y값이 (ex. 0,1) 인 이진 분류기를 훈련할 때 자주 사용되는 손실 함수 (multi-label classification)

활성화 함수 : sigmoid 사용 (출력값이 0과 1사이의 값)

수식 아래 함수에 예측값(Yi) 과 실제값(ti) 에 1을 대입하면, 수식은 0에 수렴하게 됨 아래 함수에 예측값(Yi =0)과 실제값(ti = 1)을 대입한다면, 수식은 양의 무한대가 됨 따라서 이진 분류에 적합하다고 합니다 🙂

▷ keras에서 지원하는 이항 교차 엔트로피

tf.keras.losses.BinaryCrossentropy( from_logits=False, label_smoothing=0, reduction=”auto”, name=”binary_crossentropy” )

▷ pytorch에서 지원하는 범주형 교차 엔트로피

신경망의 출력을 가장한 랜덤 벡터에 시그모이드 활성화 함수를 적용해 이진 벡터인 probabilities를 만든다. 그 다음 target을 0과 1로 이루어진 벡터로 만들어서 손실을 계산한다.

import torch import torch.nn as nn bce_loss = nn.BCELoss() sigmoid = nn.Sigmoid() probabilities = sigmoid(torch.randn(4, 1, requires_grad=True)) targets = torch.tensor([1, 0, 1, 0], dtype=torch.float32).view(4,1) loss = bce_loss(probabilities, targets) print(probabilities) print(loss)

2. categorical_crossentropy (범주형 교차 엔트로피)

출력을 클래스 소속 확률에 대한 예측으로 이해할 수 있는 문제에서 사용 (즉, 레이블 (y) 클래스가 2개 이상일 경우 사용 즉, 멀티클래스 분류에 사용됨)

활성화 함수 : softmax (모든 벡터 요소의 값은 0과 1사이의 값이 나오고, 모든 합이 1이 됨)

라벨이 (0,0,1,0,0) , (0,1,0,0,0) 과 같이 one-hot encoding 된 형태로 제공될 때 사용 가능

수식 아래 수식에서 C 는 클래스의 개수 실제값과 예측값이 모두 동일하게 될 경우 손실함수의 값은 0이 나옴 실제값과 예측값이 다를 경우 수식에 대입하면 양의 무한대로 발산

▷ keras에서 지원하는 범주형 교차 엔트로피

tf.keras.losses.CategoricalCrossentropy( from_logits=False, label_smoothing=0, reduction=”auto”, name=”categorical_crossentropy”, )

▷ pytorch에서 지원하는 범주형 교차 엔트로피

반응형

import torch import torch.nn as nn ce_loss = nn.CrossEntropyLoss() outputs = torch.randn(3, 5, requires_grad = True) targets = torch.tensor([1, 0, 3], dtype = torch.int64) loss = ce_loss(outputs, targets) print(loss)

랜덤한 벡터를 출력으로 가정하고, 그 target 벡터를 정수 벡터로 만든다. 파이토치의 CrossEntropyLoss() 클래스는 각 입력이 클래스 하나에 속하고 각 클래스에는 고유한 인덱스가 있다고 가정하기 때문이다.

3. sparse_categorical_crossentropy

tf.keras.losses.sparse_categorical_crossentropy(y_true, y_pred, from_logits=False, axis=-1)

범주형 교차 엔트로피와 동일하게 멀티 클래스 분류에 사용

one-hot encoding 된 상태일 필요 없이 정수 인코딩 된 상태에서 수행 가능

라벨이 (1,2,3,4) 이런식으로 정수형태일때 사용!

4. 평균 제곱 오차 손실 (means squared error, MSE)

신경망의 출력(^y)과 타겟(y)이 연속값인 회귀 문제에서 널리 사용하는 손실함수 회귀문제에 사용될 수 있는 다른 손실 함수 평균 절댓값 오차 (Mean absolute error, MAE) 평균 제곱근 오차 (Root mean squared error, RMSE)

예측과 타겟값의 차이를 제곱하여 평균한 값 (모두 실숫값으로 계산)

MSE가 크다는 것은 평균 사이에 차이가 크다는 뜻 / MSE가 작다는 것은 데이터와 평균사이의 차이가 작다는 뜻 즉, MSE는 데이터가 평균으로부터 얼마나 떨어져있나를 보여주는 손실함수

연속형 데이터를 사용할 때 주로 사용 (주식 가격 예측 등)

▷ pytorch에서 지원하는 MSE

import torch import torch.nn as nn mse_loss = nn.MSELoss() outputs = torch.randn(3, 5, requires_grad = True) targets = torch.randn(3, 5) loss = mse_loss(outputs, targets) print(loss)

▷ keras 에서 지원하는 MSE

keras.losses.mean_squared_error(y_true, y_pred)

https://www.tensorflow.org/api_docs/python/tf/keras/metrics/mean_squared_error?hl=ko

참고문헌 (도와주셔서 감사합니다. 글 잘읽었어요!)

wordbe.tistory.com/entry/ML-Cross-entropyCategorical-Binary%EC%9D%98-%EC%9D%B4%ED%95%B4

bskyvision.com/822

needjarvis.tistory.com/567

마치며

방금 공부하다가 알게 된 건데, 아까 딥러닝 모델을 돌리다가 오류가 난 이유는 활성화 함수 때문이 아니라 아마 오류가 난 이유가, 정수 형태의 라벨이었는데 binary cross entrophy를 사용했기 때문이었던 것 같다. 티스토리에 업로드하는 게 시간이 좀 더 걸리긴 하지만 머릿속에 확실하게 정리가 되는 것 같다!! ღ(· ᴥ ·)ッ

그동안 많은 프로젝트도 진행하고 상도 타고 했었는데, 이렇게 세세하게 고민하고 공부해보니 정말 부족함을 많이 느낀다. 얼른 TF 자격증 따자 !! 화이탱탱탱 ค^•ﻌ•^ค

반응형

[딥러닝 시리즈] ② Loss 함수 설계하기 (1)

딥러닝 시리즈는 딥러닝 기본 개념을 복습하고, 심화 내용을 스터디하기 위해 시작한 포스팅입니다.

딥러닝을 연구하시는 모두의 피드백과 의견, 소통을 환영합니다 🙂

이전 포스팅에서는 딥러닝을 사용해 문제를 풀기 위해 구체화해야 할 세 가지 항목에 대해 이야기했다:

▲ 문제에 대한 출력 ▲ 문제를 풀기 위한 입력 데이터 ▲ 알고리즘의 성능에 대한 수치 척도

2021.04.24 – [AI] – [딥러닝 시리즈] ① 딥러닝으로 풀고자 하는 문제에 대하여

내가 가지고 있는 문제를 잘 정의했다면, 이제 다음의 단계를 통해 모델을 학습해야 한다.

① 학습 데이터 수집

② 적절한 모델 아키텍처 설계

③ 적절한 Loss 함수 설계

④ 적절한 Optimizer을 통해 모델 학습

양질의 데이터를 가능한 한 많이 수집해야 하는 것은 머신러닝에서 자명한 사실이다.

적은 학습 데이터셋으로도 좋은 성능을 내기 위한 연구 분야에 대해서도 추후에 다룰 예정이지만,

기본적으로 좋은 모델은 좋은 학습 데이터에서 나온다.

다음으로는 모델이 입력 데이터로부터 좋은 feature을 추출할 수 있도록 모델 아키텍처 를 선택하고,

그를 학습할 수 있는 loss 함수 를 정의해야 한다.

이번 포스팅에서는 다양한 문제 상황에서 활용할 수 있는 Loss 함수를 정리한다.

▲ 딥러닝은 학습 데이터를 통해 입력 데이터를 아웃풋으로 매핑하는 방법을 학습하는 과정

회귀분석 – 예측하고자 하는 대상이 실수(real-value)인 문제

Mean Squared Error (MSE) Loss

– 모델 예측값과 실제 값의 차이의 제곱합 의 평균으로 정의

Mean Absolute Error (MAE) Loss

– 모델 예측값과 실제 값의 차이의 절대값 의 평균으로 정의

– 모델 예측이 크게 빗나간 상황에 대해 MSE에 비해 패널티가 적다.

– 따라서 데이터에 아웃라이어가 적거나 데이터의 아웃라이어를 무시 하고 싶을 때 사용

MAE의 경우, Loss가 최저점에 다다랐을 때에도 그라디언트가 크다는 특성이 있다.

이러한 특성은 특히 deep neural network를 사용하는 경우 학습에 있어 좋지 않다.

따라서 딥러닝에서 MAE loss를 사용할 경우,

optimal에 다가갈수록 learning rate를 줄이는 dynamic learning rate scheduling을 적절하게 사용해야 한다.

Mean Squared Logarithmic Error Loss

– 로그 함수로 변환된 실제값과 예측값 사이의 차이 제곱합 사용

– 모델의 타겟 값의 분산이 큰 경우, MSE loss는 큰 error에 대해 크게 패널티를 주는 경우가 있다.

– MSLE loss는 예측값이 큰 경우 예측값과 실제값이 차이가 커지는 것에 대한 패널티를 완화한다.

분류 분석(1) – 인풋을 여러 카테고리 중 하나로 예측하는 문제

(예) 사진을 보고 고양이인지, 강아지인지, 여우인지 분류하기

Negative Log Likelihood Loss (NLL loss)

– 인풋 데이터를 두 개 이상의 클래스 중 하나로 매핑하는 문제에서 사용

– 이 경우 마지막 레이어를 분류하고자하는 카테고리의 개수 C개로 연결하고, 그 아웃풋에 Softmax를 취하는 것이 일반적이다.

– Softmax activation은 아웃풋의 합이 1이 되게 하여, 인풋 데이터가 각각의 클래스에 해당할 확률을 예측하는 효과를 준다.

– 이 softmax activation은 NLL loss와 궁합이 좋다 : NLL loss = L(y)=−log(y)

– NLL loss는 Ground Truth 카테고리에 대해 모델이 예측한 확률값이 작아질수록 한 특성을 가진다.

– 따라서 이 Loss를 최소화하도록 모델을 optimize하면, ground truth에 대한 예측치를 높이는 쪽으로 학습이 이루어진다.

Cross-entropy loss

– 분류 모델을 최적화할 때 보편적으로 사용하는 loss 함수

– 인풋 데이터를 어떤 클래스로 분류한다는 것은, 정답 라벨의 확률을 1, 나머지 라벨의 확률을 0으로 한다는 것으로 볼 수 있다

– 아래 식에서 P(x)는 실제 라벨의 분포, Q(x)는 예측치의 분포를 의미

– 모델의 마지막 레이어에 softmax를 취한 후 cross-entropy loss를 계산하게 되면 NLL loss와 수식적으로 같아지기 때문에 softmax cross-entropy loss 등의 이름으로 불리는 것 같음.

분류 분석(2) – 인풋이 속하는 모든 카테고리를 예측하는 문제

(예) 포스터를 보고 영화 장르 예측하기 -> 예측 결과는 {‘가족’ , ‘코미디’}와 같이 여러 개의 카테고리에 매핑됨

Binary Cross-entropy loss for each class

– 각각의 클래스에 해당한다 / 아니다를 분류하는 문제로 바꾸어서 접근

– 인풋 라벨은 정답 클래스에 대한 one-hot-encoding 벡터로 넣고, 각각의 카테고리 아웃풋에 대해 binary cross entropy loss를 계산 & 합하여 학습하는 방식

– tensorflow에서는 sigmoid_cross_entropy_with_logits 함수 활용 가능

[Deep Learning] 손실함수

반응형

0, 들어가면서

손실 함수란 신경망이 학습 시 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 하는지를 알 수 있는 지표이다. 즉, 손실함수의 결과값을 가장 작게 만드는 가중치 매개변수를 찾아야 한다. 어떻게 찾는지 알아보자.

1. 데이터 학습

머신러닝에서 가장 중요한 것은 무엇일까? 바로 데이터다. 데이터를 통해 패턴을 찾고 그 패턴을 통해 특징을 추출한다. 특징이란 데이터 중에 본질적이고 중요한 데이터를 선별하는 것이고, 선별된 특징으로 패턴을 머신러닝(기계학습)하는 것이다. 이때 이미지의 특징은 보통 벡터로 표현되는데, 컴퓨터 비전 분야에서는 SIFT, SURF, HOG 등의 특징을 사용한다. 이런 특징을 사용하여 이미지 데이터를 벡터로 변환하다. 변환 후에는 지도학습의 대표 분류법인 SVM, KNN등으로 학습을 할 수 있다. 즉, 수집된 데이터를 통해 규칙을 찾아내는 것이 기계가 하는 일이라고 할 수 있다. 그러나 여기서는 특징 자체를 사람이 설계하게 된다. 다시 정리해 보면 이미지 데이터에서 특징을 추출하고 결과를 내는 방식은 아래 3가지로 나눌 수 있다.

이미지 => 사람에 의해 만들어진 알고리즘 => 결과 이미지 => 사람이 생각한 특징(FIFT, HOG 등) => 기계학습(SVM, KNN 등) => 결과 이미지 => Deep Learning(신경망) => 결과

3번의 경우, 신경망은 데이터를 그대로 학습한다. 즉, 신경망은 이미지에 포함된 중요한 특징까지도 기계가 합습한다. 이를 종간간 기계학습(End-To-End)라고 할 수 있다. 처음부터 끝까지 입력 데이터에서 목표한 축력 데이터를 사람의 개입 없이 얻을 수 있다.

2. 훈련데이터(Training Data)와 시험데이터(Test Data)

Tensorflow로 러닝을 해본 사람들은 경험 했을 텐데, 처음에 데이터를 렌던으로 훈련데이터와 시험데이터를 분류한 경험이 있을 것이다. 이렇게 나누는 이유는 우리는 학습한 데이터만 인식하고 분류하는 걸 원하지 않고 범용적으로 분류가 되길 원한다. 그렇기 때문에 훈련데이터와 시험데이터를 나눈다.

훈련 데이터를 사용하여 최적의 매개변수를 찾는다.

시험 데이터를 사용하여 앞에 훈련한 모델의 실력을 평가한다.

+ 범용적이라는 말이 헷갈릴 수도 있다. 다시 말하면, 한 데이터 셋에만 지나치게 최적화 된 상태를 Overfitting 이라고 하고 비범용적이라고 할 수 있다.

3. 손실 함수(Loss Funtion)

신경망학습에서 현재의 상태를 하나의 지표로 표현가능하다. 그 지표를 기준으로 최적의 가중치 매개변수 값을 탐색한다. 신경망 학습에서 사용하는 지표는 손실함수(Loss Function)이다. 그리고 일반적으로 평균 제곱 오차와 교차 엔트로피 오차를 사용한다.

+ 정리하면 손실함수는 신경망 성능이 안 좋은 정도를 나타내며, 수치가 낮을수록 훈력 데이터를 잘 처리하는 것이다.

3.1 평균제곱오차(Mean Squared Error, MSE)

(보통 분류 시 MSE 보다 cross entropy를 많이 사용한다. 그 이유에 대해서는 cross entropy를 블로그에서 검색하보자 참고하자)

먼저 수식을 보면 다음과 같다.

y : 신경망의 출력(각각의 뉴런의 output)

t : 정답 레이블

k : 데이터의 차원 수

t과 t의 예시를 보자. 여기서는 손글씨의 숫자를 알아보는 예시이다. 숫자는 0부터 9까지 있으며, t의 인덱스 값이 숫자라고 판단하고 보면 된다.

y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0] t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]

앞에서 공부를 했다면 y,t가 무슨 말인지 쉽게 알겠지만, 모르는 사람들을 위해서 좀 더 자세하게 적어보겠다. 이론적인 이야기를 먼저 하면 y는 소프트맥스 함수의 출력이다. 그리고 t는 원-핫 인코딩 이라고 한다.

우리가 예시를 든 것은 손글씨로 적은 숫자를 인식하는 것이고, 해결하고자 하는 문제는 적혀진 숫자를 보고 0~9사이의 숫자 중에 어느 것인지를 알아 내는 것이다. y는 인식하려는 이미지에 그려진 내용이 0~9까지 각각이 얼마나 비슷한가를 확률로 나타낸 것이다. 위의 예를 보면 내가 분석하고자 하는 이미지가 0일 확률이 10프로, 1일 확률이 5프로, 2일 확률이 60프로로 이런식으로 알려준다고 생각하면 된다. t는 y에서 가장 높은 확률만 1로 표현하고 나머지를 0으로 표현함으로 컴퓨터가 판단한 숫자는 2라고 알려준다고 생각 하면 될것이다.

+ 사실 이 부분만 디테일하게 적어도 공부할게 많다. 더 궁금한 사람들은 나의 블로그에서 ‘신경망’을 검색해보면 관련 글들이 있다. 참고하자.

다시 식으로 넘어오면, MSE는 각 데이터의 차원에서의 원소의 출력 값과 정답 레이블의 차를 제곱한 후에 그 총합을 구하는 것이다. 이함수를 사용한 예를 보자.

# 예 1. >>> t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0] >>> y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0] >>> mean_squared_error(np.array(y), np.array(t)) 0.0975000000 # 예 2. >>> t = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0] >>> y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0] >>> mean_squared_error(np.array(y), np.array(t)) 0.5975000000

예1을 보면 판단하려는 이미지에 적힌 숫자가 2일 확률이 가장 높다고 하였고, 두번째 예시는 7인 확률이 가장 높다고 하였다. 상식적으로 봐도 예 1이 더 정확한 것을 알 수 있다. 컴퓨터 기준으로 보면 예1이 정답에 더 가까워 보임을 알 수 있다.

3.2 교차 엔트로피 오차(Cross Entropy Error, CEE)

손실 함수로 MSE 외에도 CEE도 자주 사용한다. 먼저 수식부터 보자.

log 밑이 e인 자연로그이다

y : 신경망의 출력

t : 정답 레이블

정답 레이블이 2라고 해보자. 이때의 신경망 출력이 0.6이라면 교차 엔트로피 오차는 -log0.6 = 0.51 이다. 같은 조건에서 신경망 출력이 0.1이라면 -log0.1 = 2.30이 된다. 즉, 교차 엔트로피 오차는 정답일 떄의 출력이 전체 값을 정하게 된다.

+ 쉽게 말하면 곱하기니까 t의 정답 레이블에서 0인 부분은 곱해도 0이 되므로 1인 부분이 전체 값을 정한다.

아래의 자연로그 그래프를 보자.

포인트는 y의 값이 1에 가까워 질수록 결과값은 작아진다. 특정 인덱스에서 나타내는 특정 숫자인 확률이 클수록 1에 가깝고, 1에 가까울 수록 loss 값이 작아진다. 결과 값이 작을 수록 정답일 가능성이 높다는 것을 아음의 예로 판단 할 수 있다.

#예1 >>> t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0] >>> y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0] >>> cross_entropy_error(np.array(y), np.array(t)) 0.51082 #예2 >>> t = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0] >>> y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0] >>> cross_entropy_error(np.array(y), np.array(t)) 2.30258

3.3 미니배치학습

훈련 데이터를 보면 보통 60,000 개에서 많게는 수천만개까지도 있을 수 도 있다. 이 많은 데이터를 대상으로 전부 손실함수를 계산하는 것은 현실적이지 않다. 이런 경우 데이터 일부를 추려 전체의 근사치로 이용한다. 신경망 학습에서 훈련데이터로부터 일부만 골라 합습을 하는 것을 미니배치(Mini-Batch)라고 한다. 예를들면 6만장의 훈련 데이터 중에서 100장을 무작위로 뽑아 학습하는 것을 미니배치라고 한다.

우리는 머신러닝 문제를 해결 할 때 훈련데이터에 대한 손실 함수의 값을 구하고, 그 값을 최대한 줄여주는 매개변수를 찾는다. 즉, 우리는 훈련 데이터를 대상으로 손실 함수 값을 구해야한다. 그렇다면 데이터 하나에 대한 손실 함수가 아니라 훈련데이터 전체를 반영한 손실함수의 합을 구하는 방법을 알아보자.

위에서 배운 내용중 교차 엔트로피 오차 수식은 아래와 같다.

위의 식과 다른점은 데이터의 갯수인 N이 포함된 것이다. nk는 n번째 데이터의 k번째 값을 의미한다. 그리고 마지막에 N으로 나눠 정규화를 한다. 이러한 방식으로 진행하면 훈련데이터 개수와 상관없이 통일된 지표를 구할 수 있고 평균 손실 함수를 구할 수 있다.

4. 손실함수(Loss Function)을 쓰는이유

나는 처음으로 손실함수를 접했을 때, 왜 정확도를 안 구하고, loss값을 구할까?라는 질문을 했다. 이러한 의문은 ‘미분’이라는 역할을 생각해 보면 해결 할 수 있다. 신경망 학습에서는 최적의 매개변수 (가중치와 편향) 값을 탐색할 떄 손실 함수의 값을 가능한 작게 하는 매개변수 값을 찾는다. 이 때 매개변수의 미분을 계산하고, 그 미분 값을 단서로 매개변수의 값을 서서히 갱신하는과정을 반복하게 된다.

가령 여기에 가상의 신경망이 있고 그 신경망의 어느 한 가중치 매개변수에 주목한다고 할 때 그 가중치 매개변수의 손실함수의 미분이란 가중치 매개변수의 값을 아주 조금 변화 시켰을 때 손실 함수가 어떻게 변하냐의 의미이다. 만약 이 미분 값이 음수라면 그 가중치 매개변수를 양의 방향으로 변화시켜 손실 함수의 값을 줄일 수 있다. 반대로, 이 미분 값이 양수라면 그 가중치 매개변수를 음의 방향으로 변화시켜 손실 함수의 값을 줄일 수 있다. 그러나 미분 값이 0 이라면 가중치 매개변수를 어느 쪽으로 움직여도 손실 함수의 값은 달라지지 않는다. 그래서 그가중치 매개변수의 갱신은 거기서 멈춘다. + 이부분도 신경망 부분에서 자세히 다뤘다.

정리하면, 손실함수는 매개변수의 변화에 연속적으로 변화하지만, 정확도는 매개변수의 변화에 둔감하고, 변화가 있더라도 불연속적으로 변화하기 때문에 미분이 불가능하다. 미분이 안되면 최적화를 할 수 없어서 정확도가 아닌 손실 함수를 지표를 삼아 학습을 하는 것이다.

반응형

딥러닝 모델의 손실함수 · ratsgo’s blog

이번 글에서는 딥러닝 모델의 손실함수에 대해 살펴보도록 하겠습니다. 이 글은 Ian Goodfellow 등이 집필한 Deep Learning Book과 위키피디아, 그리고 하용호 님의 자료를 참고해 제 나름대로 정리했음을 먼저 밝힙니다. 그럼 시작하겠습니다.

딥러닝 모델의 손실함수로 음의 로그우도(negative log-likelihood)가 쓰입니다. 어떤 이유에서일까요?

딥러닝 모델을 학습시키기 위해 최대우도추정(Maximum Likelihood Estimation) 기법을 씁니다. 주어진 데이터만으로 미지의 최적 모델 파라메터 $θ$를 찾아야 합니다. 입력값 $X$와 파라메터 $θ$가 주어졌을 때 정답 $Y$가 나타날 확률, 즉 우도 $P(Y$|$X;θ)$를 최대화하는 $θ$가 바로 우리가 찾고 싶은 결과라고 보면 되겠습니다.

그런데 학습데이터 각각의 우도를 스케일해도 전체 argmax의 결과는 바뀌지 않으므로 ‘우도의 곱을 최대’로 만드는 $θ$와 ‘로그우도의 기대값, 즉 $Σ_xP(y$|$x)\log{P(y}$|$x;θ)$를 최대’로 하는 $θ$는 같습니다. 이와 관련해 Deep Learning Book 128페이지에는 다음과 같이 설명돼 있습니다.

The argmax does not change when we rescale the cost function, we can divide by the total number of data to obtain a version of the criterion that is expressed as an expectation with respect to the empirical distribution $P_{data}$ defined by the training data.

loss가 비정상적으로 높을 때

학습을 시키다가 loss: 7548178870.4000 val_loss: 194597683200.0000 와 같이 비정상적으로 높은 loss 값이 나왔다.

1 이하여야 하는 loss가 2도 아니고 왜이렇게 높은 건지.. 결과는 또 정상적으로 잘 나왔다.

이전엔 loss가 nan값이 나오기도 했다.

아무튼 loss 정상화를 위해 시도해본 것들을 써보려 한다.

1. batch_size

batch_size를 높이라는 말이 있던데, 아쉽게도 OOM (Out Of Memory) 문제로 시도해보지 못했다.

2. optimizer의 learning rate

learning rate를 낮추니 loss값이 줄어들긴 한다. 종류에 따라서도 다르다.

* optimizer 종류와 parameter 참고 : https://keras.io/ko/optimizers/

2-1.

tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)의 결과

lr=0.001 -> 0.0001 로 낮춰 loss가 제대로 나오나 했는데 값만 조금 낮아졌을 뿐 여전히 높다.

2-2.

tf.keras.optimizers.RMSprop(lr=0.0001, rho=0.9, epsilon=None, decay=0.0)

이번엔 Adam -> RMSprop 과 역시 lr=0.001 -> 0.0001 로 변경했지만 여전히 높다.

결과 차이는 없었다.

2-3.

tf.keras.optimizers.Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, schedule_decay=0.004)

다음 시도는 Nadam. 네스테로프 Adam 옵티마이저인데,

Adam이 본질적으로는 모멘텀이 적용된 RMSprop인 것처럼, Nadam은 네스테로프 모멘텀이 적용된 RMSprop 이라고 한다.

역대급으로 높게 나와서 epoch 2번만에 그만뒀다.

lr=0.0002로 줄여봤지만 비슷하다.

2-4.

tf.keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0)

tf.keras.optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0)

결과는 같다.

optimizer를 바꾸든 parameter를 바꾸든 loss가 줄어들 것을 기대하며 바라보는데, 처음엔 그래도 2점대로 시작한다.

하지만 이마저도 좋아하기엔 이르다. epoch 하나를 끝내고 나면 바로 위의 값들처럼 높아져있기 때문.

결국 그나마 가장 작게 나왔던 lr=0.0001의 Adam을 적용하고 다음 단계를 진행했다.

3. layer 추가

layer를 한 층 추가했더니 낮아지긴 했다. 그래도 여전히 이상하다.

4개의 Convolution + MaxPooling layer에 똑같이 하나 더 추가해 5개 layer로 학습한 결과다.

4. loss, activation 변경

categorical -> binary

softmax -> sigmoid

유사 이미지 검색이므로 다중 분류 문제인데, 이진 분류로 바꿔보니 정상화되었다.

activation은 sigmoid로 두고 loss=MSE로 변경해보았다. ( loss = ‘mean_squared_error’ )

loss를 계산하는 방법만 바꿨는데 값이 확 줄었다.

결과도 더 잘 나왔다! 다른 게 문제가 아니라 loss 함수 자체가 문제였나보다.

* loss function 참고 : https://keras.io/ko/losses/

activation=softmax , loss=MSE로 돌린 결과 loss가 커졌지만 정상적으로 나왔다.

결과는 비슷하지만 sigmoid가 더 잘 나왔기 때문에 바로 위에 돌린 걸로 학습을 계속 진행했다.

최종 선택 모델은

loss = ‘mean_squared_error’

activation = ‘sigmoid’

4개의 Convolution + MaxPooling layer (5계층에서 다시 하나를 빼니 위의 결과처럼 loss도 낮고 결과도 잘 나왔다)

키워드에 대한 정보 딥 러닝 loss

다음은 Bing에서 딥 러닝 loss 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 ㄹㅇ 쉬운 딥러닝 3강 : 손실함수 (loss function) 로 컴퓨터에게 오차를 알려줘야함

  • 컴퓨터
  • 머신러닝
  • 딥러닝
  • cost function
  • loss function
  • 손실함수
  • 딥러닝 손실함수
  • mse
  • binary entropy
  • 딥러닝 레이어
  • 연산법
  • 딥러닝 기초
  • 딥러닝강좌

ㄹㅇ #쉬운 #딥러닝 #3강 #: #손실함수 #(loss #function) #로 #컴퓨터에게 #오차를 #알려줘야함


YouTube에서 딥 러닝 loss 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 ㄹㅇ 쉬운 딥러닝 3강 : 손실함수 (loss function) 로 컴퓨터에게 오차를 알려줘야함 | 딥 러닝 loss, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  아빠 힘내세요 가사 판 | 아빠 힘내세요 ♪ | 아빠 힘내세요! 우리가 있잖아요! | 인기동요★지니키즈 7550 좋은 평가 이 답변

Leave a Reply

Your email address will not be published. Required fields are marked *