로지스틱 회귀 설정에서 제곱 손실을 사용하면 어떻게됩니까?


16

장난감 데이터 세트에서 이진 분류를 수행하기 위해 제곱 손실을 사용하려고합니다.

mtcars데이터 세트를 사용하고 있으며 갤런 당 마일과 무게를 사용 하여 전송 유형을 예측합니다. 아래 그림은 서로 다른 색상의 두 가지 유형의 전송 유형 데이터와 서로 다른 손실 함수로 생성 된 결정 경계를 보여줍니다. 제곱 손실은 여기서 는 기본 진리 레이블 (0 또는 1)이고 는 예측 확률 입니다. 즉, 분류 설정에서 물류 손실을 제곱 손실로 바꾸고 다른 부품은 동일합니다.Y I의 피의 I의 P I = 로짓 - 1 ( β T X I )i(yipi)2yipipi=Logit1(βTxi)

mtcars데이터가 있는 장난감 예제의 경우 많은 경우 로지스틱 회귀 분석에 "유사한"모델을 얻었습니다 (임의의 시드 0이있는 다음 그림 참조).

여기에 이미지 설명을 입력하십시오

그러나 무언가 (우리가한다면 set.seed(1))에서, 제곱 손실은 잘 작동하지 않는 것 같습니다. 여기에 이미지 설명을 입력하십시오 여기서 무슨 일이 일어나고 있습니까? 최적화가 수렴되지 않습니까? 물류 손실이 제곱 손실에 비해 최적화하기가 더 쉽습니까? 도움을 주시면 감사하겠습니다.


암호

d=mtcars[,c("am","mpg","wt")]
plot(d$mpg,d$wt,col=factor(d$am))
lg_fit=glm(am~.,d, family = binomial())
abline(-lg_fit$coefficients[1]/lg_fit$coefficients[3],
       -lg_fit$coefficients[2]/lg_fit$coefficients[3])
grid()

# sq loss
lossSqOnBinary<-function(x,y,w){
  p=plogis(x %*% w)
  return(sum((y-p)^2))
}

# ----------------------------------------------------------------
# note, this random seed is important for squared loss work
# ----------------------------------------------------------------
set.seed(0)

x0=runif(3)
x=as.matrix(cbind(1,d[,2:3]))
y=d$am
opt=optim(x0, lossSqOnBinary, method="BFGS", x=x,y=y)

abline(-opt$par[1]/opt$par[3],
       -opt$par[2]/opt$par[3], lty=2)
legend(25,5,c("logisitc loss","squared loss"), lty=c(1,2))

1
아마도 임의의 시작 값은 좋지 않습니다. 더 좋은 것을 선택하지 않겠습니까?
whuber

1
@ whuber 물류 손실은 볼록하므로 시작은 중요하지 않습니다. p와 y에 대한 제곱 손실은 어떻습니까? 볼록한가요?
Haitao Du

5
당신이 묘사 한 것을 재현 할 수 없습니다. optim완료되지 않았다고 알려줍니다. 그게 다입니다. 수렴 중입니다. 추가 argument로 코드를 다시 실행 control=list(maxit=10000)하고 적합도를 표시하고 계수를 원래 계수와 비교 하여 많은 것을 배울 수 있습니다 .
whuber

2
@amoeba 귀하의 의견에 감사드립니다, 나는 질문을 수정했습니다. 잘하면 좋을 것입니다.
Haitao Du

@amoeba 나는 범례를 개정 할 것이지만,이 진술은 (3)을 고치지 않을 것인가? "mtcars 데이터 세트를 사용하고 있으며 갤런 당 마일과 무게를 사용하여 전송 유형을 예측합니다. 아래 그림은 두 가지 유형의 전송 유형 데이터를 서로 다른 색상으로 표시하고 다른 손실 함수에 의해 생성 된 결정 경계를 보여줍니다."
Haitao Du

답변:


21

특정 예제에서 문제를 해결 한 것처럼 보이지만 최소 제곱과 최대 가능성 로지스틱 회귀의 차이에 대해 더 신중하게 연구 할 가치가 있다고 생각합니다.

표기법을 알아 봅시다. 하자 및 . 최대 우도 (또는 여기서하는 최소 음의 로그 우도)를 수행하는 경우 와 우리 링크 기능을 주도 .LS(yi,y^i)=12(yiy^i)2LL(yi,y^i)=yilogy^i+(1yi)log(1y^i)

β^L:=argminbRpi=1nyilogg1(xiTb)+(1yi)log(1g1(xiTb))
g

또는 우리는 최소 제곱 솔루션으로 . 따라서 최소화 과 유사 .

β^S:=argminbRp12i=1n(yig1(xiTb))2
β^SLSLL

하자 및 최소화에 대응하는 목적 함수 될 및 으로서 각각에 대해 수행된다 및 . 마지막으로 이므로 합니다. 정식 링크를 사용하는 경우 fSfLLSLLβ^Sβ^Lh=g1y^i=h(xiTb)

h(z)=11+ezh(z)=h(z)(1h(z)).


정규 로지스틱 회귀 분석의 경우 하여 우리가이를 단순화 따라서

fLbj=i=1nh(xiTb)xij(yih(xiTb)1yi1h(xiTb)).
h=h(1h)
fLbj=i=1nxij(yi(1y^i)(1yi)y^i)=i=1nxij(yiy^i)
fL(b)=XT(YY^).

다음으로 2 차 도함수를 봅시다. 헤 시안

HL:=2fLbjbk=i=1nxijxiky^i(1y^i).
이것은 여기서 입니다. 은 현재 피팅 된 값 에 의존 하지만 는 누락되었으며 은 PSD입니다. 따라서 우리의 최적화 문제는 에서 볼록 합니다.HL=XTAXA=diag(Y^(1Y^))HLY^YHLb


이것을 최소 제곱과 비교해 봅시다.

fSbj=i=1n(yiy^i)h(xiTb)xij.

이것은 우리가 이것은 중요한 포인트입니다. 그래디언트는 모든 제외하고 거의 동일 하므로 기본적으로 상대적인 그래디언트를 평탄화합니다 . 수렴 속도가 느려집니다.

fS(b)=XTA(YY^).
i y^i(1y^i)(0,1)fL

Hessian의 경우 먼저

fSbj=i=1nxij(yiy^i)y^i(1y^i)=i=1nxij(yiy^i(1+yi)y^i2+y^i3).

이것은

HS:=2fSbjbk=i=1nxijxikh(xiTb)(yi2(1+yi)y^i+3y^i2).

하자 . 이제 B=diag(yi2(1+yi)y^i+3y^i2)

HS=XTABX.

불행하게도, 의 가중치는 음이 아닌 것을 보장하지 않습니다 : 이면 이는 iff 입니다. 마찬가지로 이면 는 때 양수입니다. (또한 에도 긍정적 이지만 불가능합니다.) 이것은 가 반드시 PSD 일 필요는 없다는 것을 의미합니다. 학습을 어렵게 만드는 그라디언트 를 문제의 볼록 함을 엉망으로 만들었습니다.Byi=0yi2(1+yi)y^i+3y^i2=y^i(3y^i2)y^i>23yi=1yi2(1+yi)y^i+3y^i2=14y^i+3y^i2y^i<13y^i>1HS


결국, 최소 제곱 로지스틱 회귀 분석이 때때로 어려움을 것은 놀라운 일이 아니며, 예를 들어 또는 가깝게 충분한 값을 가 매우 작을 수 있습니다. 그라디언트가 상당히 평평합니다.01y^i(1y^i)

이것을 신경망에 연결하는 것은 비록 겸손한 로지스틱 회귀이지만 제곱 손실로 Goodfellow, Bengio 및 Courville이 다음을 쓸 때 Deep Learning 책 에서 언급 한 것과 같은 경험을하고 있다고 생각 합니다.

신경망 설계 전반에 걸쳐 반복되는 주제 중 하나는 비용 함수의 기울기가 학습 알고리즘에 대한 좋은 가이드 역할을 할만큼 충분히 크고 예측 가능해야한다는 것입니다. 채도 (매우 평평하게 됨) 함수는 그라디언트를 매우 작게 만들기 때문에이 목표를 손상시킵니다. 많은 경우에 이것은 숨겨진 단위 또는 출력 단위의 출력을 생성하는 데 사용되는 활성화 기능이 포화되기 때문에 발생합니다. 음의 로그 우도는 많은 모델에서이 문제를 피하는 데 도움이됩니다. 많은 출력 단위에는 인수가 매우 부정적 일 때 포화 될 수있는 exp 함수가 포함됩니다. 음의 로그 우도 비용 함수의 로그 함수는 일부 출력 단위의 비용을 취소합니다. 비용 함수와 출력 단위 선택 사이의 상호 작용에 대해 Sec. 6.2.2.

그리고 6.2.2에서

불행하게도, 평균 제곱 오차와 평균 절대 오차는 그래디언트 기반 최적화와 함께 사용할 때 종종 결과가 좋지 않습니다. 포화되는 일부 출력 단위는 이러한 비용 함수와 결합 될 때 매우 작은 기울기를 생성합니다. 이것이 전체 분포 를 추정 할 필요가없는 경우에도 교차 엔트로피 비용 함수가 평균 제곱 오차 또는 평균 절대 오차보다 더 인기가있는 이유 중 하나 입니다.p(y|x)

(발췌는 6 장에서 발췌)


1
나는 당신이 나를 파생물과 hessian을 파생시키는 데 도움이 된 것을 좋아합니다. 내일 좀 더 신중하게 확인하겠습니다.
Haitao Du

1
@ hxd1011 천만에요, 그 오래된 질문에 대한 링크에 감사드립니다! 나는 이것을 좀 더 신중하게 살펴
보기로

1
나는 수학을주의 깊게 읽고 코드로 확인했습니다. 제곱 손실에 대한 Hessian이 수치 근사치와 일치하지 않는다는 것을 알았습니다. 당신은 그것을 확인할 수 있습니까? 원하는 경우 코드를 보여 드리겠습니다.
Haitao Du

@ hxd1011 난 그냥 다시 유도를 통해 가서 내가 로그인 오류가 있다고 생각 : 대한 나는 내가 가지고있는 모든 곳에서 생각 가되어야합니다 . 다시 확인하여 문제가 해결되는지 알려주시겠습니까? 수정 해 주셔서 감사합니다. Y I - 2 ( 1 - Y I ) Y + 3 , Y (2) 내가I - 2 ( 1 + Y I ) Y + 3 Y 2 IHSyi2(1yi)y^i+3y^i2yi2(1+yi)y^i+3y^i2
jld

@ hxd1011 고맙습니다! 그것을 찾아 주셔서 다시 한 번 감사드립니다
jld

5

@whuber와 @Chaconne에게 도움을 주셔서 감사합니다. 특히 @Chaconne,이 파생은 내가 몇 년 동안 갖고 싶었던 것입니다.

문제는 최적화 부분에 있습니다. 랜덤 시드를 1로 설정하면 기본 BFGS가 작동하지 않습니다. 그러나 알고리즘을 변경하고 최대 반복 수를 변경하면 다시 작동합니다.

@Chaconne이 언급했듯이 문제는 분류에 대한 제곱 손실이 볼록하지 않으며 최적화하기가 어렵다는 것입니다. @Chaconne의 수학을 추가하기 위해 물류 손실과 제곱 손실에 대한 시각화를 제시하고 싶습니다.

mtcars원래 장난감 예제에는 절편을 포함하여 계수 가 있으므로 데모 데이터를에서 변경합니다 . 에서 생성 된 다른 장난감 데이터 세트를 사용합니다 .이 데이터 세트에서는 시각화에 더 적합한 매개 변수를 설정 합니다.23mlbench2

여기 데모가 있습니다

  • 데이터는 왼쪽 그림에 표시되어 있습니다. 두 가지 색상으로 된 두 개의 클래스가 있습니다. x, y는 데이터의 두 가지 기능입니다. 또한 로지스틱 손실에서 선형 분류기를 나타내는 데 빨간색 선을 사용하고, 제곱 손실에서 선형 분류자를 나타내는 파란색 선을 사용합니다.

  • 가운데 그림과 오른쪽 그림은 로지스틱 손실 (빨간색)과 제곱 손실 (파란색)의 윤곽을 보여줍니다. x, y는 우리가 피팅하는 두 개의 매개 변수입니다. 점은 BFGS가 찾은 최적의 점입니다.

여기에 이미지 설명을 입력하십시오

윤곽에서 우리는 왜 제곱 손실을 최적화하는 것이 어려운지 쉽게 알 수 있습니다. Chaconne이 언급했듯이 볼록하지 않습니다.

persp3d에서 한 가지 더 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오


암호

set.seed(0)
d=mlbench::mlbench.2dnormals(50,2,r=1)
x=d$x
y=ifelse(d$classes==1,1,0)

lg_loss <- function(w){
  p=plogis(x %*% w)
  L=-y*log(p)-(1-y)*log(1-p)
  return(sum(L))
}
sq_loss <- function(w){
  p=plogis(x %*% w)
  L=sum((y-p)^2)
  return(L)
}

w_grid_v=seq(-15,15,0.1)
w_grid=expand.grid(w_grid_v,w_grid_v)

opt1=optimx::optimx(c(1,1),fn=lg_loss ,method="BFGS")
z1=matrix(apply(w_grid,1,lg_loss),ncol=length(w_grid_v))

opt2=optimx::optimx(c(1,1),fn=sq_loss ,method="BFGS")
z2=matrix(apply(w_grid,1,sq_loss),ncol=length(w_grid_v))

par(mfrow=c(1,3))
plot(d,xlim=c(-3,3),ylim=c(-3,3))
abline(0,-opt1$p2/opt1$p1,col='darkred',lwd=2)
abline(0,-opt2$p2/opt2$p1,col='blue',lwd=2)
grid()
contour(w_grid_v,w_grid_v,z1,col='darkred',lwd=2, nlevels = 8)
points(opt1$p1,opt1$p2,col='darkred',pch=19)
grid()
contour(w_grid_v,w_grid_v,z2,col='blue',lwd=2, nlevels = 8)
points(opt2$p1,opt2$p2,col='blue',pch=19)
grid()


# library(rgl)
# persp3d(w_grid_v,w_grid_v,z1,col='darkred')

2
첫 번째 인물의 세 번째 서브 플롯에서 볼록성이 보이지 않습니다.
amoeba는 Reinstate Monica가

@amoeba 나는 볼록한 컨투어가 타원과 같다고 생각했는데, 두 개의 U 자형 곡선이 다시 볼록하지 않습니다. 맞습니까?
Haitao Du

2
이유없이? 어쩌면 더 큰 타원과 같은 윤곽의 일부일까요? 그것은 볼록하지 않은 것일 수도 있습니다. 나는 단지이 특정 인물에서는 그것을 볼 수 없다고 말하고 있습니다.
amoeba 말한다 Reinstate Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.