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

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

[[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 つのヒント

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

科学者たちは古い携帯電話を分解してリサイクルするためのAI搭載ロボットを開発している

2016年、AppleはiPhoneを11秒で分解できるリサイクルロボット「Liam」を開発したと発...

2021 年に注目すべき 9 つの IoT トレンド

[[373805]]画像ソース: https://pixabay.com/images/id-577...

マイクロソフトリサーチアジア、ウェイ・フル氏:人工知能における基礎イノベーションの第2次成長曲線

人工知能の発展の観点から見ると、GPT シリーズのモデル (ChatGPT や GPT-4 など) ...

機械学習を生産性に変えるには、よくある 4 つの落とし穴に注意してください。

[[279043]]ビッグデータダイジェスト制作出典: topbots編纂者:呉帥ある技術カンファ...

データ分析 VS アルゴリズムモデル、どのように作業を分割し、効率的に連携するか?

[[438791]]この記事はWeChat公式アカウント「地道学院」から転載したもので、著者は地道...

大型模型+ロボット、詳細なレビューレポートはこちら、多くの中国の学者が参加

大型モデルの優れた能力は誰の目にも明らかであり、ロボットに統合されれば、ロボットはより賢い脳を持つこ...

2020年グローバルNLP業界レポート:NLPテクノロジー予算が30%増加

2020 年は、公衆衛生、職業生活、経済、そして日常生活のほぼすべての側面にとって特別な年となりまし...

不正行為防止スパムテキスト認識のためのZhihuのディープラーニング実践の詳細な説明

背景今年8月時点で、知乎の登録ユーザー数は2億人を突破した。私たちはスパムの管理において、より大きな...

協働ロボットはインダストリー4.0戦略の成功の核心です

インダストリー4.0戦略における自動化とロボットのシームレスな統合に対する関心が高まっています。しか...

警察ドローンの数十億ドル規模のブルーオーシャンをどう実現するか?今後はこの3点に注目してください!

近年、飛行制御、ナビゲーション、通信などの技術の継続的な発展に伴い、ドローン産業は急速な成長を遂げて...

...

Python ベースのパーセプトロン分類アルゴリズムの実践

[[374354]]パーセプトロンは、バイナリ分類タスク用の線形機械学習アルゴリズムです。これは、人...

未来を待つ必要はありません。分析と AI の災害はすでに起こっています。

データと機械学習アルゴリズムから得られる洞察は非常に貴重ですが、ミスは評判、収益、さらには命を奪う可...

AI 転移学習はどのように機能しますか? AI モデルとトレーニング プロセスでどのような役割を果たすのでしょうか?

今日、AI プログラムは、写真やビデオ内の顔や物体を認識し、音声をリアルタイムで書き起こし、X 線ス...