損失関数の役割や種類について勉強しました(1)

#今回は何するの？
今回は損失関数について勉強しましたので、それを記載していきたいと思います。
今回参考にさせていただいたのは下記のサイト様になります。

https://ai-trend.jp/basic-study/neural-network/nn_loss_function/

###まずは、損失関数とは？
>**損失関数とは**
>損失関数は予測と実際の値のズレの大きさを表す関数でモデルの予測精度を評価します。損失関数の値が小さければより正確なモデルと言えます。
>この損失関数の評価モデルのパラメータを算出します。
>ニューラルネットワークをはじめとした機械学習モデルは損失関数の値が最小となるようなパラメータを様々な方法で求めます。

大事な部分として、**損失関数は予測と実際の値のズレの大きさを表す関数でモデルの予測精度を評価する。損失関数の値が小さければより正確なモデルと言える。**でしょう。

###線形回帰の損失関数
>例えば、立地、築年数などの説明変数から家の価格を予測する線形回帰モデルを作りたいとします。どのような予測モデルが理想的でしょうか。**実際の値と予測値のズレが小さいモデルが理想**ですね。

>実地と予測値のズレを表す関数として以下の平均二乗誤差(meen squared error)が考えられます。

>```math
M  S  E(y_i, \hat{y_i})=\frac{1}{n} \sum_{i=1}^{n} (y_i-\hat{y_i})^2
>```

>$y_i$は実値、$\hat{y_i}$は予測値を指す。

>線形回帰モデルでは上記の平均二乗誤差を用いてモデルの精度を評価していました。平均二乗誤差、つまり予測と実値のズレを最小にするパラメータ(回帰係数)を**最小二乗法(偏微分)**で用いていましたね。

>この平均二乗誤差も損失係数の一種です。

さて、ここまで読んできましたが**「偏微分」**について、疑問に思う人がいるかもしれないので補足を書いておきましょう。

######補足:偏微分
>偏微分とは、数学の多変数微分積分学における**偏微分**(へんびぶん、*partial derivative)*は、多変数関数に対して一つの変数のみに関する(それ以外の変数は定数として固定する)微分である(全微分では全ての変数を動かしたままにするのと対照的である)。偏微分はベクトル解析や微分幾何学などで用いられる。
>函数(かんすう) $\int(x,y, ...)$の変数$x$に関数偏微分は

>```math
f'_x,　f_x, \partial_xf,　\frac{\partial}{\partial x}f,　\frac{\partial f}{\partial x}
>```

>など様々な表し方があります。一般に函数の偏微分はもとの函数と同じ引数を持つ函数であり、このことを

>```math
f_x(x,y, ...),　\frac{\partial f}{\partial x}(x,y,...)
>```

>のように記法に明示的に含めてしまうこともある。

https://ja.wikipedia.org/wiki/%E5%81%8F%E5%BE%AE%E5%88%86

概念的には、こんな感じですね。
では、次に行きましょうか

###様々な損失関数
>予測する問題や用いるモデル、パラメータの求め方などによって用いる損失関数は変わります。特に回帰問題と分類問題とでは用いる損失関数は大きく異なります。

######平均二乗誤差/*Mean Squared Error*
>以下の数式で用いられるのが**平均二乗誤差**です。

>```math
M  S  E(y_i, \hat{y_i})=\frac{1}{n} \sum_{i=1}^{n} (y_i-\hat{y_i})^2
>```

>$y_i$は実値、$\hat{y_i}$は予測値を指す。

>回帰問題において平均二乗誤差は最もメジャーな損失関数といえるでしょう。線形回帰モデルやニューラルネットワーク、決定木といった様々なモデルにおいて用いられます。
>平均二乗誤差の性質としては*外れ値に対して敏感であることが挙げられます。*ですので、外れ値を含むデータに平均二乗誤差を用いてモデルを構築すると、**予測結果が不安定になります。**

これを読んで意外だったのは、やはり**外れ値に対して敏感であり、外れ値を含むデータで平均二乗誤差を用いてモデルを構築すると、予測結果が不安定になる。**という部分ですね。
なんでも「平均二乗誤差」でいいだろ。という考えを以前はしていたので、やはり構築するモデルに使用するものはしっかりと選ばなければなりませんね。
今回の勉強を踏まえて「AIに感情を持たせる」という研究を進めていこうと思います。

######平均絶対誤差/*Mean Absolute Error*
>以下の数式で表される関数が平均絶対関数です。

>```math
MAE(y_i, \hat{y_i})=\frac{1}{n} \sum_{i=1}^{n} |y_i-\hat{y_i}|
>```

>$y_i$は実値、$\hat{y_i}$は予測値を指す。

>平均絶対誤差の性質として**外れ値に強い**ことが挙げられます。


######平均対数誤差/*Mean Squaread Logarithmic Error*
>以下の数式で表される関数が平均二乗対数誤差です。

>```math
MSLE(y_i, \hat{y_i})=\frac{1}{n} \sum_{i=1}^{n} (log(1+{y_i})-log(1+\hat{y_i}))^2
>```

>$y_i$は実値、$\hat{y_i}$は予測値を指す。

>平均二乗対数誤差を用いたモデルは**予測が実値を上回りやすくなるという傾向があります。**
>例えば、来客人数を予測するようなモデルにおいては**「平均対数誤差」**が用いられます。来客数を控え目に予測して、多くの客が来てしまうと手が足りなくて困るなんてことがおきますからね。

ここで重要な部分は、**「予測が実値が上回りやすくなる」**というところですね。実値よりも上回らせてほしいときは、平均二乗対数誤差を使用するのがいいんでしょうね。

######交差エントロピー誤差/*cross entropy error*
>この損失関数は分類問題に用います。以下の数式で表されるのが交差エントロピー誤差です。

>```math
E= -\sum_{k} t_k\,log\,y_k
>```

>$t_k$は人材のカテゴリーを0, 1を用いて表す(正解であれば1、不不正解に対しては0)。
>$y_k$は予測確率

>交差エントロピー誤差もモデルの予測と実値のズレを評価します。
>ただ今まで説明した損失関数よりも計算が複雑ですね。例を用いて交差エントロピー誤差について考えてみましょう。

>写真が犬、猫、馬のどれであるか分類するモデルを例にします。
>モデルで写真を判定してみると犬である確率は20%、猫である確率30%、馬である確率が50%であると予測しました。
>この写真が馬であったとしましょう。この時、交差エントロピー誤差はいくつになるでしょうか。
>以下のように求まります。
$$E=-1(0×log0.2+0×log0.3+1×log0.5)=-log0.5$$

>交差エントロピー誤差は実際のカテゴリーに対する予測確率のみを評価します。ですので、犬、猫の予測確率に対しては$0$を掛けます。

>もう少し詳しく見ていきましょう。どのようなときに交差エントロピー誤差が小さくなるのでしょうか。
>上記の例で馬である確率を50%、100%と予測した場合、それぞれについて考えてみましょう。

>交差エントロピー誤差をそれぞれ計算すると、$$-log0.5=0.301、-log1=0$$となります。正解のカテゴリーをうまく予測すると交差エントロピー誤差も小さくなると納得できたのではないでしょうか。

>交差エントロピー誤差はニューラルネットワークなどでも用いられる損失関数です。

今回は、この4つについて勉強しましたが、まだまだ種類があるので作るものに合わせて損失関数や目的関数といったものも選定する必要がありますね。

では、今回はここまでとして、いつもの挨拶を載せて終わりです。
ここまで読んでいただき、ありがとうございました。

#挨拶
どうも、組込みエンジニアとして、とある企業におります粉です。

・では、組込みエンジニアですがAIエンジニア、機械学習エンジニアとして転職したいので、自身でいろいろと勉強を行っております。

・さて、なんでAIエンジニアや機械学習エンジニアになりたいの？と疑問をもたれる方も多いと思いますので、簡単に説明させていただきます。
１、元はAIを作ってみたい、社会問題、労働に関してもっと働きやすい環境が必要なのではないか？と考えたため様々な課題をAIなどの先端技術でアプローチをかけてみたいと思い、AIエンジニアを目指しました。
２、ですが、今やっているのは組込みエンジニアのため、使用する技術、言語が違うといったことから、独学でやってみようと思いまして、最近勉強をはじめました。
３、転職を目指す、自身の夢を叶えたいという願いもありますので、こうやって学んだことを記事しています。

・いろいろとお話ししましたが、まずは、私よりも知識、技術が豊富な先輩方から多くのことを意見、修正点、アドバイスをいただけることを楽しみにしています。

・まだまだ新参者、理解が足りていない部分もあるので記事を書きながら、修正を繰り返して理解を深めれればと思っております。(AIを研究している企業や研究機関に転職したいです。

・こんな手法もあるぞ、やり方はこうだ！！などの意見も募集しております。