質問: ターゲットを豚とします。豚と豚以外の識別(2クラス分類)をしたいので、それ以外にデータとして様々なものを用意して行います。このとき豚と豚以外のデータ数の比率は1:1とするでよいのでしょうか。あと豚以外として選定するデータとしてはどういった指標で選択するべきなのでしょうか。
回答: 豚と豚以外のデータの比率を1:1にすべきかどうかですが,データ全体の中ではそうすべきではありません. 極端な例として,用意した豚の画像は500枚ですが,この世に存在する豚以外の物体の種類は明らかに500種類より多くあります.なので1:1で豚以外の物体を集めると必ずそこには含まれない物体が存在します.NNにまったく汎化性能が無いと仮定すると,含まれない物体は豚かどうか判別が不可能ということになります. なので集める豚以外のデータはできるだけ量も種類も多いほうが良いでしょう. 一方で,一般的なNNの学習だと学習時にミニバッチを作ると思うのですが,そのミニバッチにおける比率は豚と豚以外とで1:1にするべきです. これは,もしミニバッチの中に豚がほんの僅かにしか含まれないと,NNが全てのデータの内容を無視して「豚ではない」と出力してもlossが小さくなってしまうからです(逆も然りで,バッチの中のほとんどのデータが豚であったら,データを無視して全て「豚である」とするNNのlossは小さくなってしまいます).実際は少しは学習するでしょうが,データの偏りによって出力の様子が変わることは明らかです. 問題設定によればこうした性質が好ましいこともあるでしょうが,今回のrykamiさんのやりたいことを推測すると好ましくないでしょう. 豚500枚,豚以外500枚より多いデータセットでミニバッチを豚と豚以外1:1にすると豚以外の全てのデータを一巡すると同じ豚の画像を複数回学習することになるでしょうが,豚のデータが少ない以上,それはしょうがありません. 豚以外として選定するデータとしては,先程も述べた通りあらゆる豚以外の物体が望ましいと思いますが,とはいえ,何かしらの一般的な指標があったほうが良いでしょう. まず,判別したい画像の中に人工画像は含まれるでしょうか? 例えばCGや白色ノイズのような画像です.人工画像も豚の顔と判別したいならそうした人工画像を合成して負例として加える必要があるでしょう.しかしそうではないなら,自然画像(風景や現実に存在する物体を写した画像)だけで十分でしょう. 自然画像の中でも人工物の画像はどうでしょうか? 自動車やステイプラーなどは豚の顔と判別したいでしょうか? それならば加える必要があるでしょう. おそらく他の動物の顔とは区別したいでしょうから犬や猫やラクダなんかは加える必要があるでしょう. そう考えると猪はどうでしょうか? 豚の顔と似た物体は豚の顔と混同される可能性が高いでしょう.判別したいなら負例として加えましょう. 猪のように豚の顔ではないけれど豚の顔とよく似ているものは豚の顔にのみ現れる特徴を学習させるためにミニバッチの負例の中で比率を多くするのは良さそうです.猪でなくても他の動物の顔の画像を負例としてとりあえず多く集めるのはアリだと思います. とは言え,正例である豚の画像についても,500枚しかないということですが,多いにこしたことはないです.少なくともData Augmentationはやりましょう(画像の左右を反転させたりする等).どうしても集められないなら豚の顔を3DCGなどで合成して水増しするなども考えられるでしょう.