損失関数の出力サンプル / Output sample of Loss function
SMEと交差エントロピーの具体的な出力を見て見ます。交差エントロピーに非対称性があること、複数次元の出力の出力の仕方がわかると思います。
import numpy as np # 2乗和誤差 def mean_squared_error(y, t): # ニューラルネットワークの出力と教師データの各要素の差の2乗、の総和 return 0.5 * np.sum((y-t)**2) # 交差エントロピー誤差 def cross_entropy_error(y, t): delta = 1e-7 # マイナス無限大を発生させないように微小な値を追加する return -np.sum(t * np.log(y + delta))
以下を参照させていただきました: Python vs Ruby 『ゼロから作るDeep Learning』 4章 損失関数 (loss function) の実装 - Qiita
そもそもの違いを見ます。数字の差にあまり意味はありません。
t = 0.5 # 正解データ y = 0.4 # 出力データ print("MSE:" , mean_squared_error(y,t)) print("CEE:" , cross_entropy_error(y,t))
MSE: 0.0049999999999999975 CEE: 0.45814524093709313
MSEでは、位置による距離は変わりません。交差エントロピーは位置により出力が変化します。
t = 0.8 # 正解データ y = 0.7 # 出力データ print("MSE:" , mean_squared_error(y,t)) print("CEE:" , cross_entropy_error(y,t)) t = 0.6 # 正解データ y = 0.5 # 出力データ print("MSE:" , mean_squared_error(y,t)) print("CEE:" , cross_entropy_error(y,t)) t = 0.2 # 正解データ y = 0.1 # 出力データ print("MSE:" , mean_squared_error(y,t)) print("CEE:" , cross_entropy_error(y,t))
MSE: 0.005000000000000009 CEE: 0.2853398408652799 MSE: 0.0049999999999999975 CEE: 0.41588818833597924 MSE: 0.005000000000000001 CEE: 0.4605168185989092
t = 0.95 # 正解データ y = 0.85 # 出力データ print("MSE:" , mean_squared_error(y,t)) print("CEE:" , cross_entropy_error(y,t)) t = 0.15 # 正解データ y = 0.05 # 出力データ print("MSE:" , mean_squared_error(y,t)) print("CEE:" , cross_entropy_error(y,t))
MSE: 0.0049999999999999975 CEE: 0.15439287125818693 MSE: 0.004999999999999999 CEE: 0.4493595410333986
MSEは入れ替えても出力は変わりません。交差エントロピーは入れ替えると出力が変化します。
t = 0.5 # 正解データ y = 0.4 # 出力データ print("MSE:" , mean_squared_error(y,t)) print("MSE:" , mean_squared_error(t,y)) print("CEE:" , cross_entropy_error(y,t)) print("CEE:" , cross_entropy_error(t,y))
MSE: 0.0049999999999999975 MSE: 0.0049999999999999975 CEE: 0.45814524093709313 CEE: 0.27725879222398614
3次元における出力を見てみます。
t = [0.1, 0.3, 0.7] # 正解データ y = [0.0, 0.2, 0.8] # トライデータ print("MSE:" , mean_squared_error(np.array(y),np.array(t))) print("CEE:" , cross_entropy_error(np.array(y),np.array(t)))
MSE: 0.015000000000000006 CEE: 2.250841187246052