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をすべて足した値(これが小さければ小さいほど良い)

このように、「最適解」を曖昧さが伴わないように定義づけたり、その解を厳密に求める学術分野を、「数理最適化、オペレーションズ・リサーチ」などと言います。興味がある人は調べてみてください。