言うまでもなく、ニューラルネットワークの重要性は直接トピックに行きます。
基本的なニューラルネットワークアルゴリズムとプログラミング(知覚、クロスエントロピー、勾配降下法など)のいくつかを説明する主な記事は、徐々に深くなり、最後に単純なニューラルネットワークを構築する方法を教えます(4〜5倍の準備ができているポイント終了、引き続き注意してください)。読者がXiaobaiで、ニューラルネットワークを理解していない場合は、Baiduを自分で行ってください。
簡単に言えば、ニューラルネットワークは実際には分類の問題です。たとえば、次の図で赤のデータと青のデータを区別するのに最適な直線を見つけます。もちろん、これは単純な線形分類の問題です。ネットワーク層の数が増えると、ニューラルネットワークは多くの複雑な非線形問題を処理できます。
この記事では、主にニューラルネットワークの基本を紹介します-パーセプトロンとPythonコードの実装
まず、簡単な分類問題を見てみましょう。私たちが大学の入学担当官であり、主な仕事は学生を受け入れるか拒否することであり、2つの評価情報があります:テストスコアと学期中の通常の成績(ここでも!スコアは学生の生命線です!)。下の写真は、長年にわたって学校に入学した学生の2つの結果を示しています。青い点は入学を許可された学生を示し、赤い点は受け入れられなかった学生を示します。テストスコアが7、成績スコアが6の学生は入学できますか?
実際、長年にわたる学生の入学データは、次の直線で簡単に区別できます。境界線より下のほとんどの学生は拒否され、境界線より上のほとんどの学生は許可されます。この直線を私たちのモデルと呼んでください。このモデルの誤差は当面考慮されません。上記の質問に戻ると、点(7、6)は直線の上にあり、学生が入学することは比較的確実であることがわかります。
上記の問題は、以下の数学的問題に変換されます。
横軸変数をとして記録し、縦軸変数をとして記録します。この直線の方程式がであることがすでにわかっているとします。つまり、学生のスコアはscore = 2 * test + grades-18であり、スコアが正(0以上)の場合は学生の2つのスコアを入力し、それ以外の場合は受け入れます(このステップは予測と呼ばれます)。 )。
次に、線形方程式の一般的な問題に拡張すると、次のように表すことができます。ベクトルメソッドを使用して、単純にとして記述します。それらの中には、重みとバイアスと呼ばれます。予測するコンテンツにラベルを付け、0(赤い点)または1(青い点)を取ります。ラベルを使用して予測結果を示し、0(拒否)または1(受け入れ)を取ります。私たちの目標は、可能な限り近づくことです。近ければ近いほど、一次方程式は良くなります。つまり、分類効果は良くなります。
では、別の評価基準であるクラスランキングを追加する場合、どうすればよいでしょうか。ビンゴ!3次元空間で進む必要があります。つまり、データを分割する平面を見つける必要があります。n次元がある場合、n-1次元の超平面パーティションデータを探しています。そして、それでも上記と同じです。
次に、ニューラルネットワーク-パーセプトロンの基礎を構築します。パーセプトロンは、上記の一次方程式をエンコードして小さな図形を形成することです。下の図に示すように、ここでは偏差が考慮されるため、入力の一部と見なされます。
次に、n次元データで構成されるパーセプトロンを次の図に示します。Toは入力ノード、toはエッジの重み、はバイアスの単位です。最終的な出力結果は0または1です。ここではステップ関数を使用します。
したがって、パーセプトロンは次の図で完全に表すことができます。つまり、ノードの組み合わせと見なされ、最初のノードが方程式の入力を計算し、計算結果をステップ関数に渡します。2番目のノードは、計算結果に従って予測結果を出力します。
上の図は記号で表されています。
パーセプトロンの構造は人間のニューロンの構造に似ているため、パーセプトロンによって形成されるネットワークはニューラルネットワークと呼ばれます。
パーセプトロンについて話した後、ウォームアップするための演習があります。パーセプトロンを使用して「and」操作を実装します。
あなたは最初にそれを自分で書くことを試みることができます。
コードは次のとおりです(python)。pandasライブラリをインストールする必要があります。
import pandas as pd
# TODO: Set weight1, weight2, and bias
weight1 = 1.0
weight2 = 1.0
bias = -1.5
# DON'T CHANGE ANYTHING BELOW
# Inputs and outputs
test_inputs = [(0, 0), (0, 1), (1, 0), (1, 1)]
correct_outputs = [False, False, False, True]
outputs = []
# Generate and check output
for test_input, correct_output in zip(test_inputs, correct_outputs):
linear_combination = weight1 * test_input[0] + weight2 * test_input[1] + bias
output = linear_combination > 0
is_correct_string = 'Yes' if output == correct_output else 'No'
outputs.append([test_input[0], test_input[1], linear_combination, output, is_correct_string])
# Print output
num_wrong = len([output[4] for output in outputs if output[4] == 'No'])
output_frame = pd.DataFrame(outputs, columns=['Input 1', ' Input 2', ' Linear Combination', ' Activation Output', ' Is Correct'])
if not num_wrong:
print('Nice! You got it all correct.\n')
else:
print('You got {} wrong. Keep trying!\n'.format(num_wrong))
print(output_frame.to_string(index=False))
もちろん、パーセプトロンは「or」操作、「not」操作などを実装することもできます。自分で試すことができます。
多くのことを紹介したので、あなたは質問があるかもしれません:コンピュータはどのようにして適切な線形方程式を見つけることができますか?次のセクションでこの質問に答えます。
ご不明な点がございましたら、お問い合わせください!!!