損失関数の出力サンプル / 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