一、Layer Normalization公式
1)計算各層的期望μ和標注差σ
l表示第l個隱藏層,H表示該層的節點數,a表示某一個節點在激活前的值,即a=w*x。
2)標准化
g和b分別表示增益和偏置參數,可以納入訓練隨樣本一群訓練。
3)加入激活函數輸出
二、Conditional Layer Normalization
這個思路主要來源於蘇劍林的博客基於Conditional Layer Normalization的條件文本生成
比如先確定類別,然后按類別隨機生成文本,也就是Conditional Language Model;又比如傳入一副圖像,圖像就是前提條件,來生成一段相關的文本描述,也就是Image Caption。
具體實現,將條件通過不同的矩陣變換(即線性映射)分別變成和上述公式中g和b一樣的維度,然后將變換結果加到g和b上去:
代碼實現如下
if self.center: self.beta_dense = Dense( units=shape[0], use_bias=False, kernel_initializer='zeros' ) if self.scale: self.gamma_dense = Dense(units=shape[0], use_bias=False, kernel_initializer='zeros' ) if self.center: beta = self.beta_dense(cond) + self.beta if self.scale: gamma = self.gamma_dense(cond) + self.gamma