0. はじめに
前回、以下の構成を持つニューラルネットワークを構築しました。
- 入力: x1:綺麗さ、x2:価格帯、x3:味
- 出力: 繁盛しない 〜 繁盛する
- 範囲: 最少0 〜 最大1
0に近いほど悪く、1に近いほど良いことを表します。価格帯は1に近いほど安いことを意味するので、注意してください。
1. 今日やること
今日は、構築した人工知能を使って、いくつかのパターンでシミュレーションしてみます。そして、どのようなお店が一番繁盛しそうなのか、皆さんに考えてもらいます。
2. コード
ボタン1
人工知能に勉強させるボタンです。教師データ(人工知能の勉強用の教材)と、勉強回数を入力すると、学習が開始されます(前回とまったく同じコードです)。
ボタン2
学習させた人工知能に対し、自分がシミュレーションしたい状況を与えて、予測結果を得るボタンです。
ボタン1のコード:
Private Sub CommandButton1_Click() DataSize = 7 InputDim = 3 Dim W(4) As Double Dim X(7, 4) As Double Dim DifW(4) As Double Dim EstDif(7) As Double Dim Update(4) As Double '教師データの取得 For i = 1 To DataSize For j = 1 To InputDim X(i, j) = Cells(i + 2, j + 1) Next j Next i '人工知能の学習回数を取得 NumLearning = Cells(12, 3) '初期のモデルパラメータを決定 For i = 1 To InputDim + 1 Cells(1 + i, 8) = 0 Next i '勉強開始 For t = 1 To NumLearning '現在のモデルパラメータを取得 For i = 1 To InputDim + 1 W(i) = Cells(1 + i, 8) Next i '現在のパラメータによる予測結果を算出 For i = 1 To DataSize Est = 0 For j = 1 To InputDim Est = Est + X(i, j) * W(j) Next j Est = Est + W(4) Est = 1 / (1 + Exp(-Est)) Cells(2 + i, 6) = Est Next i '現在のパラメータの評価値を算出 Eval = 0 For i = 1 To DataSize Eval = Eval + Abs(Cells(2 + i, 5) - Cells(2 + i, 6)) Next i Eval = Eval / DataSize Cells(10, 6) = Eval '頭がよくなる方法を検索 gam = 10 For k = 1 To InputDim + 1 W(k) = W(k) + gam For i = 1 To DataSize EstDif(i) = 0 For j = 1 To InputDim EstDif(i) = EstDif(i) + X(i, j) * W(j) Next j EstDif(i) = EstDif(i) + W(4) EstDif(i) = 1 / (1 + Exp(-EstDif(i))) Next i EvalTemp = 0 For i = 1 To DataSize EvalTemp = EvalTemp + Abs(Cells(2 + i, 5) - EstDif(i)) Next i EvalTemp = EvalTemp / DataSize Update(k) = EvalTemp - Eval W(k) = W(k) - gam Next k 'モデルパラメータ更新(人工知能の頭の中身を変更) For i = 1 To InputDim + 1 W(i) = W(i) - Update(i) Cells(1 + i, 8) = W(i) Next i Next t End Sub
ボタン2のコード:
Private Sub CommandButton2_Click() '学習済み人工知能のパラメータの取得 a1 = Cells(2, 8) a2 = Cells(3, 8) a3 = Cells(4, 8) a4 = Cells(5, 8) '予測したいお店を取得 xn1 = Cells(15, 3) xn2 = Cells(16, 3) xn3 = Cells(17, 3) '予測結果を取得 y = xn1 * a1 + xn2 * a2 + xn3 * a3 + a4 y = 1 / (1 + Exp(-y)) '人工知能の予測結果を書き込み Cells(18, 3) = y End Sub
3. 問題(おもて面に書く)
問題その1:
ニューラルネットワークの勉強回数を5000回とします。この人工知能は、以下のパターンA〜Fのお店に対し、どのような予測結果を示すか、数字を書いてください。
- パターンA
- すごく綺麗だが、価格が高く、味も悪いお店
- x1=0.7, x2=0.1, x3=0.1
- パターンB
- 汚いし、価格も高いが、味が良いお店
- x1=0.1, x2=0.1, x3=0.7
- パターンC
- 汚いが、価格は安い。しかし味が悪いお店
- x1=0.1, x2=0.7, x3=0.1
- パターンD
- 特に特徴がない平均的なお店
- x1=0.3, x2=0.3, x3=0.3
- パターンE
- 全部ダメなお店
- x1=0.1, x2=0.1, x3=0.1
- パターンF
- すべて完璧なお店
- x1=0.8, x2=0.8, x3=0.8
問題その2:
人工知能の学習回数を、10回にして、まったく同じ作業をやってみてください。
問題その3:
学習回数5000回と10回の結果を比較して、学習回数が少ない人工知能の問題点を簡潔に記載してください。
問題その4:
5000回学習した人工知能は、どのような順番でお店が繁盛すると予測するでしょうか。その順番を記載してください。例: AFDECB
ここまで解けたら、提出して帰っていいです。
以下の問題は、加点して欲しい人だけやってください。
4. 応用問題(裏面に書く)
応用問題その1:
基礎問題の方で、学習が少ない人工知能の問題を少し考えてもらいました。しかし、学習させまくれば良いというわけでもありません。学習させすぎた人工知能は、過学習と呼ばれる問題を抱えてしまいます。インターネットで過学習の意味を調べて、簡潔に記載してください。
学習させすぎた人工知能は、人間よりも頭が良くなり、人間を排除しだすとかそういう意味ではありません。
応用問題その2:
いま、あなたはお店を作ろうとしています。しかし、料理があまりうまくないので、「x3: 味」に対し0.3より大きい値をいれることができません。また、まったく掃除をしないというのは許せないので、「x2: 綺麗さ」は0.2以上にすることを心の中で決めています。また、当然ながら繁盛するお店(人工知能の予測が0.8以上)を作りたいと考えています。一方で、できるだけ頑張らずに目標を達成したいので、x1+x2+x3の合計値は限りなく少なくしたいです。これをすべて満たすx1, x2, x3はいくつでしょうか。
このままだとごちゃごちゃしているのでわかりにくいです。この問題を整理すると以下のようになります。
前提条件:
- 人工知能の学習回数は5000回とします。
- 教師データは変更できません。
制約条件:
- 「x3: 味」は0.3より大きな値にできません。
- 「x2: 綺麗さ」は0.2以上にしなければいけません。
- 「人工知能の予測: 繁盛」は0.8以上でなくてはなりません。
問題:
- 「すべての制約条件を違反しない」かつ「x1+x2+x3」が最小となる「x1, x2, x3」の組み合わせを求めよ。
紙に書くこと:
- 自分で探したx1, x2, x3の値(制約違反はアウト!)
- そのときの人工知能の予測結果(制約違反はアウト!)
- x1, x2, x3をすべて足した値(これが小さければ小さいほど良い)
このように、「最適解」を曖昧さが伴わないように定義づけたり、その解を厳密に求める学術分野を、「数理最適化、オペレーションズ・リサーチ」などと言います。興味がある人は調べてみてください。