チェックポイント
Create machine learning models
/ 50
Use the model
/ 50
TensorFlow: Qwik Start
GSP637
概要
このラボでは、ML の基本的な「Hello World」を学びます。ここでは、Java や C++ などの言語で明示的なルールをプログラミングするのではなく、数値間の関係を特定するルールを推論するために、データでトレーニングされるシステムを構築します。
目標
このラボでは、次の方法について学びます。
- Jupyter ノートブックでの開発環境の設定
- ML モデルの設計
- ニューラル ネットワークのトレーニング
- モデルのテスト
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
はじめに
フィットネス トラッキング用のアクティビティ認識を実行するシステムの構築に関する問題を考えてみましょう。人の移動速度を認識して、その速度に基づき、以下の条件を使用してアクティビティを推論します。
- 以下の条件を使用して、対象をランニングに拡張できます。
- 同様に、以下の条件を使用してサイクリングも検出できます。
- ここで、ゴルフのようなアクティビティを含めようとしたらどうなるか考えてみましょう。アクティビティを判別するルールの作成方法が複雑になります。
ゴルフ アクティビティの検出に役立つプログラムのコードを書き込むのは、非常に難しい作業です。
しかし、ML を使用することでこの問題を解決できます。
ML とは
前のセクションでは、ユーザーのフィットネス アクティビティを判別しようとしたときに問題が発生しました。ゴルフのようなアクティビティを検出するには条件をより複雑にする必要があるため、より多くのコードを書き込めばよいというものではありません。
次の図のように、従来の方法でアプリケーションを構築するとします。
ルールはプログラミング言語で表現します。ルールがデータに適用されると、プログラムから回答が提供されます。アクティビティ検出の場合、回答を導き出すために、ルール(アクティビティの種類を定義するために書き込んだコード)がデータ(人の移動速度)に適用されます。回答とは、ユーザーのアクティビティ ステータス(ウォーキング中、ランニング中、サイクリング中など)を判別する関数の戻り値です。
ML でも、軸が異なるだけで、このアクティビティを検出するプロセスは非常に似ています。
ルールを定義し、それらをプログラミング言語で表現するのではなく、通常は「ラベル」と呼ばれる回答をデータとともに提供します。それを受け、機械が回答とデータの関係を特定するルールを推論します。たとえば、ML のコンテキストでは、アクティビティ検出シナリオは次のようになります。
大量のデータを収集し、ラベルを付けて、「このデータならウォーキング」、「このデータならランニング」というように分類します。それにより、コンピュータが、特定のアクティビティを示す明確なパターンを特定するルールをデータから推論できるようになります。
ML は、このシナリオでプログラミングに代わる手法となるだけでなく、従来のルールベースのプログラミング アプローチでは実現できなかった可能性があるゴルフなどの新たなシナリオを切り開く可能性があります。
従来のプログラミングでは、通常、コードがプログラムと呼ばれるバイナリにコンパイルされます。ML では、データとラベルから作成するアイテムをモデルと呼びます。
再び下の図を見てみましょう。
上の図の結果がモデルであり、実行時には下のように使用されます。
モデルにデータを渡すと、モデルはトレーニングに基づいて推論したルールを使用して「このデータはウォーキングのようだ」「このデータはサイクリングのようだ」のような予測を行います。
このラボでは、あらゆる ML シナリオで使用できる要素で構成された非常にシンプルな「Hello World」モデルを構築します。
タスク 1. Vertex AI Workbench でノートブックを開く
-
Google Cloud コンソールのナビゲーション メニューで、[Vertex AI] > [ワークベンチ] をクリックします。
-
インスタンスを見つけて、[JupyterLab を開く] ボタンをクリックします。
Workbench インスタンスの JupyterLab インターフェースが新しいブラウザタブで開きます。
TensorFlow と追加パッケージのインストール
-
ランチャー メニューの [その他] から、[ターミナル] を選択します。
-
ご利用の Python 環境が構成済みかどうかを確認します。ターミナルで次のコマンドをコピーして貼り付けます。
出力例:
- 次のコマンドを実行して TensorFlow パッケージをインストールします。
-
pip3
をアップグレードするには、ターミナルで次のコマンドを実行します。
Pylint は、Python コード内のエラーをチェックし、Python ソースコードの構文およびスタイル上の問題を強調表示するツールです。
- 次のコマンドを実行して
pylint
パッケージをインストールします。
-
requirements.txt
ファイルのラボに必要なパッケージをインストールします。
これで環境が設定されました。
タスク 2. 最初の ML モデルを作成する
以下の数値のセットについて考えてみましょう。数値間の関係がわかりましたか?
X: |
-1 |
0 |
1 |
2 |
3 |
4 |
Y: |
-2 |
1 |
4 |
7 |
10 |
13 |
左から右に見ていくと、X 値は 1 ずつ増加し、対応する Y 値は 3 ずつ増加していることがわかります。つまり、関係は Y=3X に特定の値を足すか、引いた式になるはずです。
そこで、X が 0 であるときに、対応する Y の値が 1 であることを確認します。
これら 2 つの値から、関係は Y=3X+1 であることがわかります。
コードを使用してニューラル ネットワークと呼ばれるモデルをトレーニングし、データのパターンを見つけるプロセスは、上記とほぼ同じです。
データを使用して、ニューラル ネットワークをトレーニングしましょう。X と Y のセットを提供することで、それらの関係を特定できるようになります。
新しいノートブックの作成とライブラリのインポート
-
ワークベンチの左側にある + アイコンをクリックして、新しいランチャーを開きます。
-
ランチャー メニューの [ノートブック] から、[Python3] を選択します。
新しい Jupyter ノートブックが表示されます。Jupyter ノートブックの使用方法の詳細については、Jupyter Notebook Documentation をご覧ください。
- Cloud Logging の
logging
とgoogle-cloud-logging
をインポートして構成します。最初のセルに、以下のコードを追加します。
- モデルのトレーニングと評価のために
tensorflow
をインポートします。使いやすいよう、名前をtf
にします。最初のセルに次のコードを追加します。
- デバッグを目的としてデータを解析するため、
numpy
をインポートします。使いやすいよう、名前をnp
にします。最初のセルに次のコードを追加します。
-
セルを実行するため、[実行] ボタンをクリックするか、Shift + Enter キーを押します。
-
ノートブックを保存します。[ファイル] > [保存] をクリックします。ファイル名を
model.ipynb
にして、[OK] をクリックします。
データの準備
次に、モデルのトレーニングに使用されるデータを準備します。このラボでは、前に使用した 6 つの X と 6 つの Y を使用します。
X: |
-1 |
0 |
1 |
2 |
3 |
4 |
Y: |
-2 |
1 |
4 |
7 |
10 |
13 |
ご覧のように、X と Y の関係は Y=3x+1 であるため、たとえば X = 1 なら Y = 4 になります。
numpy
という Python ライブラリでは、データ提供の事実上の標準方式となっている配列型データ構造が多数提供されています。これらを使用するには、np.array([])
を使用して、numpy
で値を配列として指定します。
- 2 つ目のセルに、以下のコードを追加します。
モデルの設計
このセクションでは、TensorFlow を使用してモデルを設計します。
ニューラル ネットワークと呼ばれる ML アルゴリズムを使用して、モデルをトレーニングします。できるだけシンプルなニューラル ネットワークを作成します。レイヤは 1 つで、そのレイヤに 1 つのニューロンがあります。ニューラル ネットワークの入力は、一度に 1 つの値のみです。そのため、入力の形状は [1] にする必要があります。
- 2 つ目のセルに、以下のコードを追加します。
モデルのコンパイル
次に、ニューラル ネットワークをコンパイルするためのコードを書き込みます。ここでは、損失
とオプティマイザー
の 2 つの関数を指定する必要があります。
ML で数学計算を数多く目にしてきた人は、通常ならここでそれを使用しますが、tf.keras
が数学計算を関数内にうまくカプセル化してくれます。
-
事前の検証により、数値の関係が
y=3x+1
であることがわかっています。 -
この関係を学習しようとするコンピュータは、たとえば
y=10x+10
と推測します。損失
関数は、推測された回答を既知の正しい回答と比較し、推測の精度を測定します。
tf.keras
で使用できるさまざまな種類の損失関数の詳細については、Module: tf.keras.losses ドキュメントをご覧ください。- 次に、モデルでオプティマイザー関数を使用して推測が再実行されます。損失関数の結果に基づいて、損失の最小化が試みられます。この時点では、たとえば
y=5x+5
と推測されます。この推測は依然として精度が低いですが、正しい結果に近づいています(損失が減少しています)。
tf.keras
で使用できるさまざまな種類のオプティマイザーの詳細については、Module: tf.keras.optimizers ドキュメントをご覧ください。- モデルで、指定したエポックの数に達するまでこの処理が繰り返されます。
- 2 つ目のセルに次のコードを追加します。
上のコード スニペットで、損失には mean_squared_error
、オプティマイザーには stochastic gradient descent (sgd)
を使用するようモデルに指示します。これらの数学計算は、まだ理解する必要はありませんが、役に立つことはわかるはずです。
ニューラル ネットワークのトレーニング
ニューラル ネットワークをトレーニングして X と Y の関係を「学習」させるには、model.fit
を使用します。
この関数により、推測、その精度(損失)の測定、オプティマイザーを使用した推論の再実行などのループでモデルをトレーニングします。指定したエポックの数(このラボでは 500)に達するまで、このプロセスが繰り返されます。
- 2 つ目のセルに次のコードを追加します。
上のコードでは、model.fit
により、指定されたエポック数に達するまでモデルのトレーニングが繰り返されます。
model.fit
の詳細については、tf.keras.Model ドキュメントの fit セクションをご覧ください。この時点で、ファイルは次のようになります(コードは 2 つの異なるセルに含まれます)。
コードの実行
スクリプトの準備ができました。実行してどうなるか見てみましょう。
-
[実行] ボタンをクリックするか、Shift + Enter キーを押して、ノートブックの 2 つ目のセルを実行します。
-
出力を確認します。スクリプトで、各エポックの損失が印刷されることを確認します。出力は、ここに示されているものと若干異なる可能性があります。
e-
が付いた数は、指数が負の科学的記数法で表示されています。エポックをスクロールすると、損失値が最初の数エポックでは非常に大きいものの、ステップごとに小さくなっていることがわかります。たとえば、次のようになります。
トレーニングが進むと、損失が非常に小さくなります。
トレーニングが完了するまでには損失が極めて小さくなり、モデルによる数値間の関係の推論精度が非常に向上したことが示されています。
おそらく 500 のエポックすべてを確認する必要はないので、別の値を試してみましょう。この例を見ると、損失は 50 エポックのみで非常に小さくなるため、値は 50 で十分かもしれません。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
モデルの使用
X と Y の関係を学習するよう、モデルをトレーニングしました。
model.predict
メソッドを使用して、モデルのトレーニング中には出現しなかった X に対する Y を割り出すことができます。たとえば、X = 10 である場合の Y はどうなるでしょうか。
- 3 つ目のセルに次のコードを追加して、予測を行います。
cloud_logger
に渡されます。-
Ctrl+S キーを押すか、[ファイル] -> [保存] をクリックして、ノートブックを保存します。
-
3 つ目のセルを実行するため、[実行] ボタンをクリックするか、Shift + Enter キーを押します。
Y 値がトレーニング ログ(エポック)の後に表示されます。
出力例:
Y=31 になると思っていたかもしれません。しかし、実際はそれをわずかに上回る値(31.005917)でした。なぜでしょう。
答え: ニューラル ネットワークは確率を扱います。X と Y の関係が Y=3X+1 である可能性が非常に高いと計算されました。しかし、6 つのデータポイントだけではその確証がありません。そのため、10 に対する結果は 31 に非常に近くなりますが、必ずしも 31 にはなりません。
ニューラル ネットワークでは、このパターンが繰り返されます。ほとんどの場合は確実性ではなく確率を扱い、特に分類に関しては、確率に基づいて結果を割り出すためにコーディングを少しだけ行います。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
お疲れさまでした
これで完了です。このラボでは、TensorFlow を使用して独自の ML モデルを作成、トレーニング、テストしました。
次のステップと詳細情報
- Vertex AI について知っておくべきことをすべて確認します。
- AI で楽しみましょう。Google で実験をご覧ください。
- TensorFlow の詳細を確認します。
- Google の ML を使用した予想
- BigQuery ML スタートガイド
- BigQuery ML 予測モデルによるタクシー運賃の予測
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 9 月 16 日
ラボの最終テスト日: 2024 年 9 月 16 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。