ニューラルネットワークはとてもシンプルです。機械学習の入門書をご紹介します | 役立つ情報

ニューラルネットワークはとてもシンプルです。機械学習の入門書をご紹介します | 役立つ情報

[[331060]]

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載しています。転載の際は出典元にご連絡ください。

機械学習を学びたいですか?ここに入門書があります。

ニューラル ネットワーク、ランダム フォレスト、コンピューター ビジョンがすべて含まれています。

この Facebook ソフトウェア エンジニアは、入門用の投稿を作成しました。

基礎知識ゼロの初心者向けに特別に設計されています。

基礎的な理解がある学生も見学に来て理解を深めることもできます。

ニューラルネットワークを例に見てみましょう。

ニューラルネットワーク入門

著者は、ニューラル ネットワークは複雑ではないと述べています。

「ニューラル ネットワーク」という用語はよく使われており、難しいと思われることが多いですが、実際はもっと簡単です。

そうですか?まずは見てみましょう。

ニューラル ネットワークの理解は、主にニューロン、ニューラル ネットワークの構築、ニューラル ネットワークのトレーニングの 3 つの部分に分かれています。

ニューロン - ニューラルネットワークの基本単位

2 入力ニューロンは次のようになります。

まず、ニューロンは入力 x1 と x2 を受け取り、いくつかの数学演算を実行してから、出力 y を生成します。

ニューロンでは通常、次の 3 つのことが起こります。

1. 各入力に、対応する重みが掛けられます。

2. 重み付けされた入力をすべて加算し、バイアス b を追加します。

3. 活性化関数をインポートし、出力 y を取得します。

一般的に、活性化関数はシグモイド関数(S 型関数とも呼ばれる)を使用します。任意の値(-∞、+∞)を入力すると、最終出力は 0 から 1 の範囲になります。

この点に関して彼は簡単な例も挙げました。

活性化関数をS型関数、2入力ニューロンを例にとり、パラメータw=[0,1] (w1=0、w2=1)、b=4を設定します。

入力: x=[2,3]

出力: y=0.999

これは最も単純なニューラル ネットワーク、つまりフィードフォワード ニューラル ネットワークです。

このため、著者はプロセス全体を Python でも実装しました。

  1. numpyをnpとしてインポートする
  2. シグモイド(x)を定義します:
  3. # 活性化関数: f(x) = 1 / ( 1 + e^(-x))
  4. 1 / ( 1 + np.exp(-x))を返す
  5. クラスニューロン:
  6. def __init__(自己、重み、バイアス):
  7. self.weights = 重み
  8. 自己バイアス = バイアス
  9. def フィードフォワード(自己、入力):
  10. # 入力に重みを付け、バイアスを追加し、活性化関数を使用する
  11. 合計 = np.dot(self.weights, inputs) + self.bias
  12. シグモイド(合計)を返す
  13. 重み = np.array([ 0 , 1 ]) # w1 = 0 、 w2 = 1
  14. バイアス = 4 # b = 4
  15. n = ニューロン(重み、バイアス)
  16. x = np.array([ 2 , 3 ]) # x1 = 2 、 x2 = 3
  17. print(n.feedforward(x)) # 0.9990889488055994

ニューラルネットワークの構築

ニューロンが相互に接続されてニューラル ネットワークを形成します。

ニューラル ネットワークは、2 つの入力、2 つのニューロンを持つ隠し層、および 1 つのニューロンを持つ出力層で構成されます。

複数の隠しレイヤーを使用できることに注意してください。たとえば、次のようになります。

前の例の条件を引き続き採用してみましょう。

ニューラル ネットワークには、任意の数のレイヤーと任意の数のニューロンを含めることができます。

以下は Python コードの例です。

  1. numpyをnpとしてインポートする
  2. # ... 前のセクションのコードをここに記述
  3. クラスOurNeuralNetwork:
  4. '' '
  5. 以下の機能を備えたニューラル ネットワーク:
  6. - 2つの入力
  7. - 2つのニューロン(h1、h2)を持つ隠れ層
  8. - 1つのニューロンを持つ出力層(o1)
  9. 各ニューロンは同じ重みとバイアスを持ちます。
  10. - w = [ 0 , 1 ]
  11. - b = 0
  12. '' '
  13. __init__(self)を定義します。
  14. 重み = np.array([ 0 , 1 ])
  15. バイアス = 0
  16. # ここでのニューロンクラスは前のセクションからのものです
  17. self.h1 = ニューロン(重み、バイアス)
  18. self.h2 = ニューロン(重み、バイアス)
  19. self.o1 = ニューロン(重み、バイアス)
  20. def フィードフォワード(self, x):
  21. out_h1 = self.h1.feedforward(x)
  22. out_h2 = self.h2.feedforward(x)
  23. # o1入力はh1とh2からの出力です
  24. out_o1 = self.o1.feedforward(np.array([out_h1, out_h2]))
  25. out_o1を返す
  26. ネットワーク = OurNeuralNetwork()
  27. x = np.array([ 2 , 3 ])
  28. print(network.feedforward(x)) # 0.7216325609518421

ニューラルネットワークのトレーニング - 損失関数の計算

私たちが次のようなプロジェクトに取り組んでいるとします。体重と身長から性別を判定します。

体重と身長を入力として、性別を出力として取得します。

男性は 0、女性は 1 に設定され、残りのデータは簡略化されました。

ニューラル ネットワークをトレーニングする前に、まず、そのネットワークのパフォーマンスがどの程度優れているか、さらに優れたパフォーマンスが得られるかどうかを定量化する方法、つまり損失関数が必要です。

ここでは、計算に損失関数の一種である平均二乗誤差を使用します。

予測結果が良くなればなるほど、損失は少なくなります。ニューラル ネットワークをトレーニングする目的は、損失を可能な限り減らすことです。

すべての人が男性であると確信している場合、つまり予測値が 0 である場合、何が起こるでしょうか?

Python の例:

  1. numpyをnpとしてインポートする
  2. def mse_loss(y_true, y_pred):
  3. # y_true と y_pred は同じ長さの numpy 配列です。
  4. ((y_true - y_pred) ** 2 ).mean()を返す
  5. y_true = np.array([ 1 , 0 , 0 , 1 ])
  6. y_pred = np.array([ 0 , 0 , 0 , 0 ])
  7. print(mse_loss(y_true, y_pred)) # 0.5

ニューラルネットワークのトレーニング - 損失の最小化

損失関数を計算した後、損失を最小限に抑える必要があります。これは、ニューラル ネットワークをトレーニングする最終的な目標でもあります。

次の投稿には、微積分を含む多変数計算に関するセクションがあります。

著者は次のように述べている。

微積分が苦手な場合は、いつでもスキップできます。

簡単にするために、このデータセットには Alice だけが存在すると仮定します。

したがって、損失関数は次のようになります。

次に、その重み w とバイアス b がグラフ上にマークされるため、重み変数は 6 つ、バイアス変数は 3 つあります。

したがって、損失関数は多変量関数として記述されます。

w1 を調整するだけで L が変化する可能性があると想像してください。それで、具体的にどう変わったのでしょうか?これには偏微分を計算する必要があります。

連鎖律は逆導出を実行するために使用され、このプロセスはバックプロパゲーションと呼ばれます。

詳しい計算過程はここには載っていないので、ぜひ彼の個人サイトに行って確認してみてくださいね~(リンクは記事の最後に貼ってあります)

著者は、このプロセスを見るときは急がないようにと親切に注意を促しており、ペンと紙を取り出すと理解しやすくなります。

次に、確率的勾配降下法の最適化アルゴリズムを使用します。式は次のとおりです (w1 を例にとります)。

「学習率」はトレーニングの速度を制御します。大きすぎたり小さすぎたりするのは適切ではありません。

このようにすべての変数を最適化すると、損失関数は徐々に減少し、ニューラル ネットワークを改善できるようになります。

簡単に言えば、トレーニングプロセス全体は次のようになります。

1. データ セットから Alice などのサンプルを選択します。

2. バックプロパゲーションを使用して、すべての変数の偏微分を計算します。

3. 確率的勾配降下法を使用してニューラル ネットワークをトレーニングし、変数を更新します。

4. 手順 1 に戻ります。

ニューラルネットワークの部分については以上です。いかがでしたでしょうか?読んでみてどう思いますか?

ニューラルネットワークはかなり優れていると思いますか?他にも学ぶべき概念が待っています!

<<:  2020年に会話型AIはどのように発展するでしょうか?

>>:  企業が AI 戦略を採用するための 8 つのヒント

ブログ    
ブログ    

推薦する

Google Bardは「防御を突破」し、自然言語を使ってロックを解除、インジェクションによるデータ漏洩のリスクを示唆

大規模言語モデルは、テキストを生成する際にプロンプ​​トワードに大きく依存します。この攻撃技は、プロ...

技術者がAIを活用してキャリアを守る方法

「自動化」や「人工知能(AI)」などの「技術革新」がビジネスや仕事の本質を変えていることは間違いあり...

...

スーパーアプリの3つの成功例

スーパーアプリは、より多くの顧客を引き付けるための革新的な戦略です。さらに、多数のサービスを 1 つ...

デザイナーが危険にさらされています! AI広告デザイン分野におけるSuningの探求と実践

[51CTO.comより引用] 人工知能時代の到来とともに、商業デザイン分野における芸術と技術の競争...

オタクのためのオープンソースドローンプロジェクト4つ

[[178638]] [51CTO.com クイック翻訳]過去数年間で、民間および商用ドローンへの関...

予測によると、人工知能市場は急速に成長し続けるだろう

スペイン紙エル・ムンドのウェブサイトが2月20日に報じたところによると、ソフトウェア、ハードウェア、...

機械学習アルゴリズム(1):決定木とランダムフォレスト

モデルの組み合わせ (ブースティング、バギングなど) と決定木に関連するアルゴリズムは多数あります。...

機械学習ソートLTR:線形モデルを簡単に始める

[[207297]] LTR のエントリーレベルのモデルは線形モデルです。この記事では線形モデルを例...

プロのアニメーターがGANを使って「怠け者」を助ければ、数週間かかる仕事を数分で終わらせられる

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

LEACHプロトコルのアルゴリズムと特徴

LEACH プロトコルについてはあまり知られていないかもしれません。このプロトコルの説明は、低電力適...

ボストンのロボットが話題になった後、別のヒューマノイドロボットがデビューした

10年以上前、テヘラン大学の研究者らは、Surenaと呼ばれる原始的なヒューマノイドロボットを発表し...

公正な「データアクセス」の新秩序の構築 AIが都市統治に根付く

最近では、AI テクノロジーがさまざまな業界に大きな影響を与えていることがニュースで頻繁に紹介されて...

2020年中国人工知能産業調査レポート

2020年は異例の年でした。新型コロナウイルス感染症のパンデミックは多くの経済生活のリズムを乱し、人...

AIがワンクリックでタトゥーを除去し、数秒でスターの「素顔」を見ることができる

時には、他人のタトゥーを真似されないように隠す必要があることもあります。時々、人々は単に好奇心から、...