pythonとも機械学習とも勉強不足でわからない点があったため、chainerの交差エントロピー誤差を計算するsoftmax_cross_entropy() について質問させてください。

MNISTを識別するサンプルコード
https://github.com/pfnet/chainer/blob/master/examples/mnist/train_mnist.py
を動かしてみました。

疑問に思った点は以下です。

  1. 49行目のreturn F.softmax_cross_entropy(y, t), F.accuracy(y, t) で、多クラス識別をする際の交差エントロピー誤差は、出力層のユニット数分(ラベルに対応するユニットだけでなくほかのユニットの確率も余事象として)計算しなければならないのに、教師データtを1ofK表記にせず、そのまま渡している点。
    交差エントロピーは与えられたラベルのユニットだけに関する重みを更新するのでしょうか。
    関数内部で1ofK表記、または多ラベル表記に変換しているのかなと考えてソースを見たのですがよくわかりませんでした。どのような処理をしているのかも教えてほしいです。

  2. 48行目の y = model.l3(h2) でsoftmax関数を通していない理由は、softmax_cross_entropy() 内で self.y, = Softmax().forward_cpu((x,)) として、関数内でsoftmax関数を適用しているからなのでしょうか
    そうすると 49行目の return F.softmax_cross_entropy(y, t), F.accuracy(y, t) のyをh2の値を渡してもいい気がするのですがどうなんでしょう(yで線形変換する必要はあるのか)

質問は以上です。
初歩的な質問かもしれませんがよろしくお願いします。

交差エントロピー、多クラス識別について参考にしたブログ
http://hshinji.hateblo.jp/entry/2015/05/20/081530

softmax_cross_entropyのReference
https://github.com/pfnet/chainer/blob/master/chainer/functions/softmax_cross_entropy.py