投稿

Translate

#80 モデルのコンパイル、トレーニング、評価

イメージ
今回は、『#78 レイヤーの設定』で作成したモデルに対して、コンパイル、トレーニングを行い、さらにトレーニング済みのモデルを評価することを体験します。 コンパイルとは、後述しますが、トレーニングを進める方法や評価基準をどうするかというルールを設定して、モデルのトレーニングの準備することです。  その前に、ディープラーニングのしくみについて、簡単に説明しておきます。  1.ディープラーニングのしくみ 複数の 隠れ層 ( 中間層 )を持つ ニューラルネットワーク 、すなわち ディープラーニング は、神経細胞をモデルにシステム上で動くように設計されたものです。神経細胞のニューロンに対応した人工ニューロンを ノード と呼びます。下記のスライド図1では、〇で表されているところです。 このノードを拡大すると、図2のようになります。入力、入力の数、重み、バイアス、活性化関数、出力によって表されます。 ノードの構成する要素を簡単に説明すると下記のようになります。 重み → 入力情報の重要度を決定する倍率(係数)です。 → トレーニング前はランダムな初期値ですが、model.fit() によって最適な値に書き換えられていきます。 バイアス → ノードの感度・発火のしやすさを調整する閾値(定数)です。 → 重みと入力の積の総和に対して、ノード1個に対して1個の定数値として足し算されます。重みと同様にトレーニングによって自動更新されます。 活性化関数 → 生物学的なニューロンにおける「一定以上の刺激を受けると発火する」動作を再現するスイッチの役割を担っています。 → この関数を用いて出力を算出するのですが、ニューラルネットワークやディープラーニングでは、この関数を用いることにより単なる一次関数ではなく、複雑な曲線や境界線(非線形なパターン)を学習する表現力を獲得することになります。 出力 → ノードの最終計算結果、すなわち次の層への入力値となります。 ★「会議の発言がどう伝わるか」で考えるたとえ話が秀逸です! 【参考】 AI がざっくりわかる    https://note.com/nice_sable4056/n/nd989bea2c114 ************* ノードを構成している入力、入力の数、重み、バイアス、活性化関数を用いると出力は一つの数式で...

#79 【参考】インスタンス

イメージ
Keras3の公式APIドキュメントには、Input関数について、次のように記載されています。 (Google翻訳で和訳しました) https://keras.io/api/layers/core_layers/input/ "Kerasテンソルをインスタンス化するために使用されます。 Kerasテンソルは、テンソルに似たシンボリックなオブジェクトです。これには特定の属性が追加されており、モデルの入出力さえ分かればKerasモデルを構築できるようになっています。 例えば、a、b、cがKerasテンソルである場合、『model = Model(input=[a, b], output=c)』といった記述が可能になります。" Pythonはオブジェクト指向言語ですが、オブジェクト指向を理解する上で重要な『インスタンス』について理解を深めていきましょう。 Pythonでは、文字列や数値等のデータ、機械学習の際のデータの一つ一つに、重複しないID(識別番号)がつけられています。 IDをつけて管理されるデータの一つ一つを インスタンス と言います。 インスタンスが持つ 値 を出力するためには print関数 を使ってきましたが、インスタンスの ID を出力するためには、 id関数 を使用します。具体的にコードを書いて、違いを見てみましょう。 数値一つ一つがインスタンスであって、変数はインスタンスの所在地情報を持っているに過ぎないことがわかると思います。 今度は、リストの例を見てみましょう。 値が等しいかどうかを見るためには『 == 』、インスタンスのIDが等しいかどうかを見るためには『 is演算子 』が使われます。p、q、rのリストの値とIDを見てみましょう。 ④を見ると、pとqの値も、IDも異なっています。 一方、⑤では、pとrの値は同じですが、IDは異なっています。 変数の値が同じことを『 同値 』であると言い、IDが同じことを『 同一 』であると言います。 このように、Pythonでは、数値一つ一つがインスタンスであって、変数はインスタンスの所在地情報を持っているに過ぎないことを理解しておきましょう。 詳しく知りたい方は、下記の書籍をお勧めします。 【参考書籍】 Python ゼロからはじめるプログラミング さて、前述の『Kerasテンソルをインスタ...

#78 レイヤーの設定

イメージ
データの前処理が終わり、分析するデータが用意できたところで、今度は、モデルを作っていきます。 Section1で解説したように、多数の層からなるニューラルネットワークの学習のことをディープラーニングと呼び、 入力層 、 隠れ層(中間層) 、 出力層 を レイヤー と呼びます。ディープラーニングのモデルを作るにあたって、まずは、これらのレイヤーを設計、構築することが必要となります。 今回の体験するコードは、下記のスライドのように、 ①layersモジュールを取り込み 、 ②データを順番に流す処理 、 ③様々な種類を使ったレイヤーの構築 を行うものとなります。順を追って、説明していきます。 ① from keras import layers 何度も出てきたモジュールのインポート処理です。このTensorFlow公式サイトのチュートリアル『はじめてのニューラルネットワーク:分類問題の初歩』では、layersモジュールの取り込みを行っていないため、コードが、長くなっています(青字を付け加えなくてはなりません…)。 model = tf.keras.Sequential([     tf.keras. layers.Flatten(input_shape=(28, 28)),     tf.keras. layers.Dense(128, activation='relu'),     tf.keras. layers.Dense(10) ]) ② model = keras.Sequential() 今回のチュートリアルでは、『 Sequential Model 』を作成します。 ディープラーニングのモデルは、レイヤーで構成されており、各レイヤーは前のレイヤーからの入力を受け取り、出力を生成します。 Sequential Modelは、レイヤーを一直線に繋げて構成されるもっとも単純なモデルであり、一つの入力から一つの出力を生成することができます。 ( )内は、[ ]を付け、選択したレイヤーをカンマで区切って順番に並べていきます。 例えば、今回のチュートリアルのような画像分類の問題では、画像を入力とし、それがどのクラスに属するかを出力することができます。 Kerasには、『 Sequential Model 』の...

#77 データの前処理

イメージ
データがどのようなものかを観察したら、次は、データの前処理を行います。 1.データの目視 トレーニングの前に、データを前処理する必要があります。前処理はピクセルの値がどのようになっているかにより変わってきますので、画像の目視をしながら確認していきましょう。 Matplotlibを使って画像を描画します。コードは下記のようになります。  plt.figure()  plt.imshow(train_images[ 0 ])  plt.colorbar()  plt.grid( False )  plt.show() ここからは、コードの解説です。 ① plt.figure()  グラフや画像を書き込むための「白いキャンバス(外枠)」を新しく準備する際に使います。今回は引数がありませんが、( )内に次のような引数を指定することができます。 figsize : (width, height)のタプルを渡す。単位はインチ/dpi: 1インチあたりのドット数 facecolor : 背景色/edgecolor: 枠線の色 ② plt.imshow(train_images[0])  imshow は、数字の羅列である画像データを、私たちが目で見られる画像に変換してキャンバスに貼り付ける処理を行います。 ( )内の『train_images[0] 』は、訓練用データセットの「0番目(最初)の画像データ」を指しています。 ③ plt.colorbar()  画像の横にカラーバー(色と数値の対応表)を表示します。コンピュータにとって画像は『ピクセルごとの数値の集まり』です。このチュートリアルの画像は、各ピクセルが 0(黒・背景)から 255(白・衣類の部分)までの数値で表されているため、どの色がどの数値に対応しているかを視覚的に分かりやすくしてくれます。 ④ plt.grid(False)  画像の上に重なるグリッド線(網目状の補助線)を「非表示」にします。True にすると写真の上に方眼紙のような線が引かれてしまい、画像が見づらくなることがあるため、ここでは False にしてすっきりさせています。 ⑤ plt.show()  ここまで準備したキャンバスを、実際に画面として表示させます。1〜4行目までは「こういう画面を作れ」という命...

#76 インポートとデータの読み込み

イメージ
では、 実際にコードを体験してみましょう。 TensorFlow公式サイト の チュートリアル から、初級の『KerasによるMLの基本』→『基本的な画像分類』を選んでクリックすると、『 はじめてのニューラルネットワーク:分類問題の初歩 』というチュートリアルが現れます。 今回は、この教材を基に解説していきます。 この教材は、TensorFlowのためのものでAPIとして『tf.keras』が用いられていますが、今回はこれを少し変更して、Keras3で進めていきたいと思います。 TensorFlowで『tf.keras』を用いた場合とKeras3の場合では、コードにどのような差があるのかを体験してみてください。 1.Kerasをインポート コラボで Keras3を使うのは、実はとても簡単です! コラボにプリインストールされている TensorFlow のバージョンはすでに 2.16 以上になっているため、特別なインストール操作をすることなく、最初からKeras3が使える状態になっています。さあ、Kerasをインポートしましょう! 公式チュートリアルでは、バージョンが「2.11.0」になっていますが、今回はバージョンが「2.20.0」になっていました。 2.データセットFashion MNIST TensorFlow 公式チュートリアルで使用している『Fashion MNIST』とは、衣料品やバッグなど10種類のファッションアイテムの画像を集めた機械学習・画像認識用のデータセットです。 もともと手書き数字の画像セット『MNIST』が機械学習の入門用として広く使われていましたが、現在のAI技術では簡単になりすぎたので、ソフトウエアの企業Zalandoの研究チームが2017年に公開したものです。 各サンプルは、28×28ピクセル(マス)のグレースケール画像で、サンプル数は70,000、10種類のラベルと関連付けられています。 今回は、このデータセット『Fashion MNIST』をインポートしていきましょう。 3.データセットFashion MNISTをインポートする 『TensorFlow 公式チュートリアル』の通りに、コードを書くと、下記のようにエラーが出てしまいます。 よく見ると、『 tf.keras. 』という文字があります。これは、TensorFlowのコードで...

#75 Keras

イメージ
ディープラーニングを行う際、使用するツールは、OSSでは TensorFlow か PyTorch が主流です。 しかし、現在、Kerasが『TensorFlowの初心者向けラッパー』という枠組みを完全に超越し、Kerasのシンプルな書き方を1度覚えれば最新の恩恵をすべて受けられる状態になっています。そのため、『5th STEP ディープラーニング』では、Kerasを使っていきます。 Kerasは、ギリシャ語で『角(horn)』を意味する言葉に由来しており、ホルンのようにシンプルで美しく鳴るツールにしたいという開発者の願いが込められています。 ここでは、Kerasの開発者の中心メンバーであるフランソワ・ショレやKeras開発経緯についてまとめてみました。 ショレの思想やKeras開発の経緯を知ることにより、Kerasへの愛着を深めていきましょう。 好きになることが、上達の秘訣です。 1.フランソワ・ショレ(François Chollet) ショレ氏はフランスの出身で、同国のエリート養成機関であるENSTA Paris(国立高等先端技術学校)で学びました。応用数学、コンピュータサイエンス、信号処理、システム工学、そしてオートメーション(自動制御)などを専攻し、高度な科学的・技術的基盤を構築しました。この在学中(2011〜2012年頃)から、すでにニューラルネットワークを用いた研究や実験に関わり始めています。2012年にMaster of Engineeringを取得しました。 学位取得後の2012年から、ショレ氏は日本に渡り、東京大学の大規模システム・知能シミュレーション研究室(國吉康夫教授の研究室)に研究員として籍を置きました。 東大時代は、現実世界のノイズが多いデータストリームを扱うための「自己組織化(非監視下学習)アルゴリズム」や「オンライン推論」、そして人間の幼児が環境に適応しながら知能を獲得していくプロセスを模した「認知発達ロボティクス(Cognitive Developmental Robotics)」の研究に従事しました。 「 AIとは、単に大量の固定データを統計処理するシステムではなく、未知の環境に対して自律的に適応・抽象化を行うシステムである 」という彼の現在のAGI(汎用人工知能)に対する根幹の思想は、この東大研究室時代に深く形成されたと言われて...

#74 ディープラーニングとは

イメージ
ジェフリー・ ヒントン は、 ディープラーニング の研究で、2024年のノーベル物理学賞を受賞しました。 ヒントンは、2013年、自身のAI関連スタートアップであるDNNresearchがグーグルに買収されたことで、Googleに入社。以来、Googleと、教授を務めるトロント大学で研究を続けてきました。2019年には、「ディープラーニング革命の父たち」としてルカン氏、ヨシュア・ベンジオ氏とともにチューリング賞をノーベル賞に先立って受賞しています。 そのヒントンが、2023年5月にGoogleをやめました。 彼は、長年にわたり、AIの倫理的な問題を指摘していました。とりわけ気にしていたのが、軍事用途への採用についてです。New York Timesのインタビューでは、Googleを辞めたので、AIのリスクについて自由に話せるようになったと語っています。今となっては自分のライフワークについて後悔しているが「私がやらなくても誰かがやっていただろうと自分を慰めている」とのことです。 開発者自らが自分の研究について後悔していると述べるほど、ディープラーニングが社会にインパクトを与えたわけですが、ディープラーニングを体験することでリスクの一端を知ることに少しでも役に立てばと思い、当ブログでも5th STEPとして、ディープラーニングを取り上げることにします。 5th STEPの最初のSectionとして、まずは、ディープラーニングがどんなものかを解説していきます。 1.ディープラーニングのポジション ディープラーニングは、大量のデータから特徴やパターンを自動で学習する機械学習の手法の一つで、AIに属しています。 2.ディープラーニングのしくみ ディープラーニングは、人間の脳の記憶の仕組みにヒントを得て、開発されました。まさに、AI(人工知能)ですね。 【出典】  https://www.wakodo.co.jp/product/special/babyfood/babyfood/global/advice/article01.html その後、各研究者により、コンピュータ上における神経細胞のモデル化が行われました。しかし、コンピュータの性能が低かったり、実験を行うためのビッグデータが未整備だったために、社会実装化されることはなく理論上のものとして扱われていました。 ちなみに、...