二値分類タスクを機械学習を用いて解く際には、ロジスティック回帰や(最終層の活性化関数を(標準)シグモイド関数とした)深層学習などが利用される。
これらのモデルを勾配降下法で学習するためには、損失関数である Binary Cross Entropy の勾配を計算する必要があるので、その計算をする。
対数の底は情報理論の文脈では 2 を用いるが、勾配計算の微分の文脈では便宜上 e を用いる(最終的な結果が定数倍変わってしまうが、学習率に吸収されるため勾配計算では問題ない)。
定義
入力と目的変数
入力を x 、目的変数を y とすると以下のように表される。
xy=(x1x2…xn)∈Rn∈{0,1}
ここで、入力とはロジスティック回帰の場合は特徴量のベクトル、深層学習の場合は隠れ層の最終層(出力層の直前の層)の出力のベクトルを指す。
重みとバイアス
線形結合の重みを w 、バイアスを b とすると以下のように表される。
wb=(w1w2…wn)∈Rn∈R
予測モデル
(標準)シグモイド関数を σ:R→(0,1) とすると、ロジット z と予測確率 t は以下のように表される。
ここで、(0,1) は開区間 {x∈R∣0<x<1} を表す。
zt=xw+b=x1w1+x2w2+⋯+xnwn+b=σ(z)=1+exp(−z)1=1+e−z1
交差エントロピーの意味
目的変数 y の確率変数を Y 、予測値 y^ の確率変数を Y^ とすると、 Y の分布 p と Y^ の分布 q は 、b∈{0,1} を用いて以下のように表される。
p(b)q(b)=p(Y=b∣x)={y1−yb=1b=0=by+(1−b)(1−y)=q(Y^=b∣x)={t1−tb=1b=0=bt+(1−b)(1−t)
p と q の交差エントロピー H(p,q) は以下のように表される。
H(p,q)=Eb∼p[Iq(b)]=Eb∼p[−log(q(b))]=−b∈{0,1}∑p(b)log(q(b))=−(p(1)log(q(1))+p(0)log(q(0)))=−(ylog(t)+(1−y)log(1−t))
ここで、 Iq(b) は分布 q による確率変数 b の自己情報量を表し、 Eb∼p[Iq(b)] は確率変数 b が分布 p に従うときの Iq(b) の期待値を表す。
交差エントロピー H(p,q) は、以下のように変形できる。
H(p,q)=Eb∼p[Iq(b)]=Eb∼p[Iq(b)]−Eb∼p[Ip(b)]+Eb∼p[Ip(b)]=Eb∼p[Iq(b)−Ip(b)]+Eb∼p[Ip(b)]=D(p∣∣q)+Hb∼p(b)
ここで、 Hb∼p(b) は確率変数 b が分布 p に従うときの b のエントロピーを表し、 D(p∣∣q) は分布 p と分布 q の KL ダイバージェンスを表す。
KL ダイバージェンス D(p∣∣q) は分布 p と分布 q の距離(遠さ)やズレを表す指標とされる。
エントロピー Hb∼p(b) は分布 q によらず一定であるため、交差エントロピー H(p,q) を最小化することは、KL ダイバージェンス D(p∣∣q) を最小化することと同じであり、分布 p に近い分布 q を求めることができる。
損失関数
交差エントロピー H(p,q)=−(ylog(t)+(1−y)log(1−t)) を y と t の関数として表したものを損失関数とする。
損失関数 L:{0,1},(0,1)→R は以下のように表される。
L(y,t)=−(ylog(t)+(1−y)log(1−t))
勾配計算
重み w の勾配 ∂w∂L(y,t) とバイアス b の勾配 ∂b∂L(y,t) を計算する。
それぞれ、以下のように変形できる。
∂w∂L(y,t)∂b∂L(y,t)=∂w∂z∂z∂t∂t∂L(y,t)=∂b∂z∂z∂t∂t∂L(y,t)
それぞれの値を求める。
∂t∂L(y,t)∂z∂t∂w∂z∂b∂z=∂t∂(−(ylog(t)+(1−y)log(1−t)))=−(ty−1−t1−y)=−(t(1−t)y(1−t)−(1−y)t)=−(t(1−t)y−yt−t+yt)=−(t(1−t)y−t)=t(1−t)t−y=∂z∂σ(z)=∂z∂(1+e−z1)=∂z∂(1+e−z)−1=−(1+e−z)−2⋅∂z∂(1+e−z)=−(1+e−z)−2⋅e−z⋅∂z∂(−z)=−(1+e−z)−2⋅e−z⋅(−1)=(1+e−z)2e−z=1+e−z1⋅1+e−ze−z=1+e−z1⋅1+e−ze−z+1−1=1+e−z1⋅1+e−z(1+e−z)−1=1+e−z1⋅(1−1+e−z1)=t(1−t)=∂w∂(xw+b)=x=∂b∂(xw+b)=1
これらを代入して、重み w の勾配とバイアス b の勾配を求める。
∂w∂L(y,t)∂b∂L(y,t)=x⋅t(1−t)⋅t(1−t)t−y=(t−y)x=1⋅t(1−t)⋅t(1−t)t−y=t−y
勾配降下法
勾配降下法で学習を行う場合を考える。
学習率を η とすると、重み w とバイアス b の更新は、以下のように行う。
wb←w−η∂w∂L(y,t)=w−η(t−y)x←b−η∂b∂L(y,t)=b−η(t−y)
重み付け
正例に対する重みを α とすると、重み付き損失関数 Lα(y,t):{0,1},(0,1)→R は以下のように表される。
Lα(y,t)=−(αylog(t)+(1−y)log(1−t))
ここで、 α>1 のときは正例に対して重みを大きくし、再現率を高め、 α<1 のときは負例に対して重みを大きくし、適合率を高める。
α の値はデータセットに含まれる正例の割合を p1 とすると、 α=p11−p1=p11−1 とすることが多い。
重み w の勾配 ∂w∂Lα(y,t) とバイアス b の勾配 ∂b∂Lα(y,t) を計算する。
L(y,t) の際と同様に、それぞれ、以下のように変形できる。
∂w∂Lα(y,t)∂b∂Lα(y,t)=∂w∂z∂z∂t∂t∂Lα(y,t)=∂b∂z∂z∂t∂t∂Lα(y,t)
∂t∂Lα(y,t) を求める。
∂t∂Lα(y,t)=∂t∂(−(αylog(t)+(1−y)log(1−t)))=−(tαy−1−t1−y)=−(t(1−t)αy(1−t)−(1−y)t)=t(1−t)(1−y)t−αy(1−t)
これと先に求めた値を代入して、重み w の勾配とバイアス b の勾配を求める。
∂w∂Lα(y,t)∂b∂Lα(y,t)=x⋅t(1−t)⋅t(1−t)(1−y)t−αy(1−t)=((1−y)t−αy(1−t))x=1⋅t(1−t)⋅t(1−t)(1−y)t−αy(1−t)=(1−y)t−αy(1−t)