ロジスティック回帰設定で損失の二乗を使用すると、ここで何が起こっていますか?


16

損失の二乗を使用して、玩具データセットのバイナリ分類を試みています。

私が使用していmtcarsた透過型を予測するために、データセット、ガロンあたりの利用マイルと体重を。以下のプロットは、異なる色の2種類の透過型データと、異なる損失関数によって生成された判定境界を示しています。二乗損失がある グランドトゥルースラベル(0または1)であり、予測確率である。言い換えれば、私はロジスティック損失を分類設定の平方損失に置き換えています。他の部分は同じです。yp2ypp=ロジット1βTバツ

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の2乗損失はどうですか?凸ですか?
ハイタオドゥ

5
あなたが説明したものを再現することはできません。 optim終了していないことを伝えます、それだけです:収束しています。追加の引数を使用してコードを再実行し、control=list(maxit=10000)適合をプロットし、その係数を元の係数と比較することにより、多くのことを学ぶことができます。
whuber

2
@amoeba、コメントありがとうございます。質問を修正しました。うまくいけばもっと良いです。
ハイタオデュマー

@amoeba凡例を修正しますが、このステートメントは修正されません(3)?「mtcarsデータセットを使用し、ガロンあたりのマイルと重量を使用して透過タイプを予測しています。以下のプロットは、異なる色の2種類の透過タイプデータと、異なる損失関数によって生成される判定境界を示しています。」
ハイタオデュマー

回答:


19

特定の例で問題を修正したように見えますが、最小二乗と最尤ロジスティック回帰の違いをより慎重に研究する価値があると思います。

表記を取得しましょう。してみましょうと。最大尤度(または、ここで行っているように最小の負の対数尤度)を実行している場合、 と私達のリンク機能であります。LSyy^=12yy^2LLyy^=yログy^+1yログ1y^β L= argmin BをR pn i = 1 y i

β^L:=argminbRp=1nyログg1バツTb+1yログ1g1バツTb
g

あるいは、 最小二乗解として。したがって、を最小化し、についても同様です。

β^S:=argminbRp12=1nyg1バツTb2
β SLSLLβ^SLSLL

ましょうと最小化に対応する目的関数もとように行われ、それぞれと。最後に、、ます。正規リンクを使用している場合、が得られることに注意してください fSfLLSLLβ S β L H = G - 1 、Y I = H X T I B H Z = 1β^Sβ^Lh=g1y^=hバツTb

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^).

次に、二次導関数をやってみましょう。ヘッシアン

HL:=2fLbjbk=i=1nxijxiky^i(1y^i).
HL=XTAXA=DIAG Y1 - YHL Y YHLB つまり、で、です。は現在の近似値依存しますが、はドロップアウトし、は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

ヘッセ行列の場合、最初に

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).

LET。現在、 B=診断y21+yy^+3y^2

HS=バツTABバツ

残念ながら、の重みは負でないことが保証されていません場合、場合は正です。同様に、場合、これは、(に対しても正ですが、それは不可能です)。これは、が必ずしもPSDではないことを意味します。したがって、学習を難しくする勾配をつぶすだけでなく、問題の凸性を台無しにしました。By=0y21+yy^+3y^2=y^3y^2y^>23y=1y21+yy^+3y^2=14y^+3y^2y^<13y^>1HS


全体として、最小二乗ロジスティック回帰が時々苦労することは驚くことではありません。あなたの例では、が非常に小さいため、または近い十分な近似値があります。勾配はかなり平坦化されています。01y^1y^

これはニューラルネットワークに接続しますが、これは控えめなロジスティック回帰ですが、二乗損失では、Goodfellow、Bengio、およびCourvilleがDeep Learning本で次のように言及しているようなものを経験していると思います:

ニューラルネットワーク設計全体で繰り返されるテーマの1つは、コスト関数の勾配が大きく、学習アルゴリズムの適切なガイドとして十分に予測可能でなければならないということです。飽和する(非常に平坦になる)関数は、勾配を非常に小さくするため、この目的を弱めます。多くの場合、これは非表示ユニットの出力を生成するために使用されるアクティベーション関数または出力ユニットが飽和するために発生します。負の対数尤度は、多くのモデルでこの問題を回避するのに役立ちます。多くの出力ユニットには、引数が非常に負の場合に飽和するexp関数が含まれます。負の対数尤度コスト関数のログ関数は、一部の出力単位のexpを取り消します。コスト関数と出力単位の選択との相互作用については、セクションで説明します。6.2.2。

また、6.2.2では、

残念ながら、勾配ベースの最適化と併用した場合、平均二乗誤差と平均絶対誤差は多くの場合、悪い結果をもたらします。飽和する出力ユニットの中には、これらのコスト関数と組み合わせると非常に小さな勾配を生成するものがあります。これは、分布全体を推定する必要がない場合でも、クロスエントロピーコスト関数が平均二乗誤差または平均絶対誤差よりも一般的である理由の1つです。py|バツ

(両方の抜粋は第6章からです)。


1
あなたがデリバティブとヘシアンを導き出すのを手伝ってくれたことが本当に好きです。明日はもっと注意深くチェックします。
ハイタオドゥ

1
@ hxd1011どういたしまして、あなたの古い質問へのリンクをありがとう!私は本当にこれをもっと慎重に
経験するつもり

1
数学を注意深く読み、コードで検証しました。二乗損失のヘッセ行列が数​​値近似と一致しないことがわかりました。確認してもらえますか?必要に応じて、コードを表示できてうれしいです。
ハイタオデュ

@ hxd1011私は再び導出を行ったところ、サインエラーがあると思います:の場合、どこにでもあるはずだと思います。再確認して、それが修正されたかどうかを教えてもらえますか?訂正してくれてありがとう。HSy21yy^+3y^2y21+yy^+3y^2
jld

@ hxd1011それを修正してうれしい!それを見つけてくれてありがとう
-jld

5

助けてくれた@whuberと@Chaconneに感謝します。特に@Chaconneでは、この派生は私が何年もの間望んでいたものです。

問題は最適化部分にあります。ランダムシードを1に設定すると、デフォルトのBFGSは機能しません。ただし、アルゴリズムを変更して最大反復回数を変更すると、再び機能します。

@Chaconneが言及したように、問題は分類のための二乗損失であり、非凸であり、最適化が困難です。@Chaconneの数学を追加するために、ロジスティック損失と2乗損失の視覚化を示したいと思います。

mtcars元のおもちゃの例には切片を含む係数があるため、デモデータをから変更します。から生成された別の玩具データセットを使用します。このデータセットでは、視覚化に適したパラメーターを設定します。3mlbench2

デモはこちら

  • データを左の図に示します。2つの色の2つのクラスがあります。x、yはデータの2つの機能です。さらに、ロジスティック損失から線形分類器を表すために赤い線を使用し、二乗損失から線形分類器を表すために青い線を使用します。

  • 中央の図と右の図は、ロジスティック損失(赤)と二乗損失(青)の等高線を示しています。x、yはフィッティングする2つのパラメーターです。ドットは、BFGSによって検出された最適なポイントです。

ここに画像の説明を入力してください

等高線から、2乗損失の最適化が難しい理由を簡単に理解できます。シャコンヌが述べたように、それは非凸です。

persp3dのもう1つのビューを次に示します。

ここに画像の説明を入力してください


コード

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凸状の輪郭は楕円に似ていると思いました。2つのU字型の曲線が背中合わせになっていないと思いますか?
ハイタオドゥ

2
いいえ、なぜですか?たぶん、より大きな楕円のような輪郭の一部でしょうか?私は、それが非常によく非凸であるかもしれないことを意味します、私はちょうど私がこの特定の図にそれを見ていないと言っています。
アメーバは、モニカを復活させる
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.