ニューラルネットワーク 分かりやすくしてみた2
前回の記事では重回帰分析を例にしてニューラルネットワークを表現したが、そもそも重回帰分析ってscikit-learnなどで分析できるからわざわざニューラルネットワークで分析するの?ってなったので分類問題に当てはめる
ニューラルネットワークで分類
商品のデザインと品質から「商品を買う・買わない」を判定する
前提
ニューロンからニューロンに渡る値には重みがかけられる 重みがかけられた入力値にはバイアスが付加される ニューロンから出力する値は活性化関数を通す
活性化関数はReLU(ランプ関数)を使う 活性化関数「Tanh」「Sigmoid」「ReLu」の仕組みと使い分けを数式なしで整理する/ディープラーニング
買う・買わないの判定方法
- 入力値は(デザイン、品質が)良いなら「1」、良くないなら「0」
- デザインまたは品質いずれかが「1」だったら買う
- デザイン、品質どちらも「0」だったら買わない
- デザイン、品質どちらも「1」だったら買わない(価格が高くて買えない)
- 出力層の計算結果は買うなら「1」、買わないなら「0」
デザイン | 品質 | 判定 |
---|---|---|
1 | 1 | 買わない |
0 | 1 | 買う |
1 | 0 | 買う |
0 | 0 | 買わない |
入力層→中間層の計算
計算1
重み:入力層のデザイン、品質から「計算1」に向かう矢印 → 「入力値×重み」が計算1に入力される バイアス:「計算1」に付加される
重みは「5」、バイアスは「-5」にする
デザイン | 品質 | (デザイン×重み)+(品質×重み)+バイアス | ReLU |
---|---|---|---|
1 | 1 | 5 | 5 |
0 | 1 | 0 | 0 |
1 | 0 | 0 | 0 |
0 | 0 | -5 | 0 |
活性化関数はReLUなので、マイナスの値は0になる デザイン、品質が両方とも良いケースのみプラスの値になる
計算2
重み:入力層のデザイン、品質から「計算2」に向かう矢印 → 「入力値×重み」が計算1に入力される バイアス:「計算2」に付加される
重みは「-5」、バイアスは「5」にする
デザイン | 品質 | (デザイン×重み)+(品質×重み)+バイアス | ReLU |
---|---|---|---|
1 | 1 | -5 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 0 | 0 |
0 | 0 | 5 | 5 |
デザイン、品質が両方とも良くないケースのみプラスの値になる
中間層→出力層の計算
計算1の重み:中間層の「計算1」から出力層の「判定」に向かう矢印 計算2の重み:中間層の「計算2」から出力層の「判定」に向かう矢印 → 「入力値×重み」が判定に入力される バイアス:「判定」に付加される
計算1、計算2の重はを両方とも「-10」、バイアスは「10」にする
計算1 | 計算2 | (計算1×計算1の重み)+(計算2×計算2の重み)+バイアス | ReLU |
---|---|---|---|
5 | 0 | -40 | 0 |
0 | 0 | 10 | 1 |
0 | 0 | 10 | 1 |
0 | 5 | -40 | 0 |
計算1、計算2の結果が両方とも「0」のケースのみ出力が「1」になる → デザイン、品質のいずれかが良いケースだったら買うと判定される
まとめ
重みとバイアスを調整してReLUの計算を複数組み合わせると 「デザイン、品質のいずれか1だったら1を出力する」というように柔軟な判定ができる
ReLUの計算1つだけだと「デザイン、品質どちらも1」 「デザイン、品質どちらも0」の両方のケースに対して0を出力することはできない (プラスの値、マイナスの値にする境界を1本の線で引く感じ)