投稿

8月, 2023の投稿を表示しています

「ニューラル・ネットワークの基礎」公開しました

 【「ニューラル・ネットワークの基礎」公開しました 】 以前に行ったセミナーをビデオにまとめたコンテンツ「ニューラル・ネットワークの基礎」を公開しました。ご利用ください。基本的には、ニューラル・ネットワークを初めて学ぶ人をターゲットにしたものです。 セミナーは、「生物のニューラル・ネットワーク」と「コンピュータ上のニューラル・ネットワークのモデル」という二つのコンテンツから構成されています。 現代のディープラーニング技術は、生物のニューラル・ネットワークをコンピューター上でモデル化しようとした試みがその発端です。両者の研究は、現在では離れているのですが、両者は「人間の知能」の解明という大きな目標を共有しています。 前半の「生物のニューラル・ネットワーク」では、自然が作り上げた最も複雑で精緻なシステムの一つである動物の神経系について概説しています。 もっとも、ここで具体的に紹介されているのは、「一つのニューロン」がどう刺激に反応するのかという単純なケースだけです。ただ、そこには、ニューロンの発火の働きと「シナプス可塑性」の簡単な説明が含まれています。 重要なことは、これらは、後半の「コンピュータ上のニューラル・ネットワークのモデル」に、そのまま引き継がれていくということです。 後半の展開は、基本的には、単純なニューラル・ネットワークからより複雑なニューラル・ネットワークに段階的に進んで、ニューラル・ネットワークの状態を数式で表していきます。 ただ、僕には、一つの意図がありました。それは、このより複雑なネットワークの表現への変化が、より複雑な数学的表現への変化に対応していることを意識してもらいたいと考えていました。具体的には、   実数と実数の積 ==> ベクトルとベクトルの積 ==> ベクトルと行列の積 ポイントは、スカラー、ベクトル、行列と登場する数学的量は変わるのですが、表現される式の形は同じものになるということです。これらの見かけは異なる数学的量の間に、共通の「積」の概念が定義できれば、逆に、見かけは異なるさまざまなネットワークを「一つの式」で表現できるのです。 そこが理解できれば、多数の層からなる複雑なFull ConnectのDNN(Deep Neural Network)も、単純な式の組み合わせで表現できることになります。 今回の「ニューラル・

ニューラル・ネットワークの状態を式で表現する

【 ニューラル・ネットワークの状態を式で表現する 】 今回のセッションから、生物のニューロンではなく、コンピュータ上でモデル化された話に入ります。  ただ、両者のニューロンは、次のような特徴を共有しています。 ・ニューロンは、シナプスを通じて入力を受け取る。 ニューロン上のシナプスの数は、ニューロンが受け取る入力の数に等しい。 ・シナプスには、「重み」がある。重みの数は、シナプスの数、すなわち入力の数に等しい。 ・ニューロンが出力をするか否かは、ニューロン上のシナプスの「多数決」で決められる。ただし、すべてのシナプスが、平等な一票を持つわけではない。シナプスは、その「重み」に応じた投票権を持つ。 ・シナプス i が重み Wi を持つ時、入力 Xi に対して、重みを掛けて、Xi・Wi の投票を行う。プラスの重みを出力賛成、マイナスの重みを出力反対と考えよう。 ・重みづけられた入力、すなわち投票を、 すべて足し合わす。これが、投票結果。 ・投票結果がゼロより大きかったら、ニューロンは「発火」するのか? そうではない。「発火」の条件には、ある閾値がある。それをバイアスという。 ・重みと入力の対応する項目同士をかけて、すべて足し合わせて、それにバイアス bを足したものを、「ニューロンの状態」と呼ぶことにしよう。ニューロンの状態の値が、ゼロを超えた時、ニューロンは発火する。 今回のセッションでは、単純なニューラル・ネットワークを対象に、その状態を式で表現することを目指します。  「単純なニューラル・ネットワーク」と書きましたが、単純と言ってもそこには複雑さがあります。ここでは、次のようなステップで、単純なものから複雑なものへステップを登っていきます。  (1) 一つのニューロンで、一つの入力を受け取る場合。  (2) 一つのニューロンで、複数の入力を受け取る場合。  (3) 複数のニューロンからなる一つの層で、複数の入力を受け取る場合。 これらの場合、ニューロンの状態を、共通の式で表現することができることを知るのが、今回のセッションの獲得目標です。 先に「単純なニューラル・ネットワーク」と書いたのは、入力を受け取る「ニューロンの層」が、一つしかないニューラル・ネットワークのことです。多数の「ニューロンの層」が積み重ねられた「複雑なニューラル・ネットワーク」の状態を、どのように

複数の層からなるネットワークを、 グラフで簡潔に表す

【 複数の層からなるネットワークを、グラフで簡潔に表す 】 このセッションでは、前回見たニューラル・ネットワークの状態の行ベクトル表示 Y=XW+b をベースに、新しいグラフによるネットワークの新しい表示を紹介します。  まずは、「複数のニューロンからなる一つの層」の新しいグラフ表示を考えてみましょう。 これまでは、ニューラル・ネットワークの表示は、ニューロンをノードとし、ニューロンとニューロンの接続を直線で表してきました。新しい表示では、φ( X・W + b ) といった式そのものを、グラフで表すことにします。 このグラフのノードはもはやニューロンではありません。ノードはこのニューラル・ネットワークの振る舞いを決めている、XやWやb と言った量を表しているか、あるいは、ノードへの入力をノードの出力に変える「計算」を表しています。 この新しいグラフの辺は、もはやニューロンとニューロンの接続を表していません。辺は、ノードからノードへのデータの流れを表しています。 そうすると面白いことが起きます。 「複数のニューロンからなる一つの層」の振る舞い(層への入力を層からの出力に変える)は、φ( X・W + b ) という一つの式で表現されますので、その式そのものをグラフにした新しいグラフもその形は一つしかありません。 「一つの層」のネットワークを表現する、この一つしかないグラフの形は、「複数の層」からなるネットワークを表現する際に、基本的なブロックの役割を果たします。 【 複数の層からなるFull Connectなネットワークを表現する 】 複数のニューロンからなる層が複数存在するネットワークは、無数に存在します。ただ、その中でも最も基本的なパターンは、「複数の層からなるネットワークで、向かい合った層のノードがすべて接続されているネットワーク」のパターンです。これをを、Full Connect Network といいます。Full Connect Networkを、DNN(Deep Neural Network)、あるいは Feed forward Network と呼ぶこともあります。 こうしたグラフを(旧来のグラフの意味でです)、「完全二部グラフ」というのですが、その意味は、図形的には明らかだと思います。 この複数の層からなるFull Connect なネットワークを、先

表記を見直す -- ちょっと数学する

【 表記を見直す -- ちょっと数学する 】 このセッションでは、二つの点でこれまでの表記を見直します。  ⚫️ ニューラル・ネットワーク表記の見直し。   ⚫️ ニューロンの状態を表す次の式の見直し。 Y = W・X^T + b^T     これらの見直しは、Googleのフレームワーク TensorFlowの表記に準じたものです。 ニューラル・ネットワークのフレームワークには、TensorFlowやPyTorchやKeras等があるのですが、基本的な考え方は、皆同じです。 【 ニューラル・ネットワーク表記の見直しについて 】 これまで取り上げたニューラル・ネットワークは、「一つのニューロンに一つの入力を与える」「一つのニューロンに複数の入力を与える」「複数のニューロンからなる一つの層に複数の入力をあたえる」という、いずれも単純なものでした。 このセッションでは、入力層の後ろに二つの層があるニューラル・ネットワークを取り上げます。 ただ、各層のニューロンの数が増えると、一つのニューロンを丸で、ニューロンとニューロンの接続を線で表すこれまでのネットワークの表記では、複雑になりすぎることを具体的な例で示します。 ただ、どのような表記が複雑なネットワークの構造を簡潔に表現するかについては、次回のセッションで触れたいと思います。 【 ニューロンの状態を表す式の見直しについて 】 これまでは、ニューロンの状態を、式 Y = W・X^T + b^T   で表現してきた。X^Tは、XのT嬢ではなく、XをTranspose(転置)するという意味です。 ここで、 𝑋も bも行ベクトルなので、X^Tもb^Tも列ベクトルになります。この表記では、ニューロンの状態 Yは、列ベクトル表されています。 ここでの見直しの中心は、ニューロンの状態Yも、入力X, バイアス bと同様に、行ベクトルで表すことです。 結論を先に言えば、  列ベクトル表示 Y = W・X^T + b^T は、  行ベクトル表示 Y' = X・W' + b  に変換できます。このセッションでは、そのことを見ていきます。 【 ちょっと数学する 】 ただ、少し数学的な準備が必要です。といっても、難しいことではありません。 まず、スカラーもベクトルも特殊な行列とみなせるという話をします。 m行n列の行列を、mx

ActivatorとSoftMax

【 ActivatorとSoftMax 】 これまで、一つの層しか含まない単純なニューラル・ネットワークのニューロンの状態 x は、入力 X, 重み W, バイアス b という三つのパラメータを使って、簡単な式で表すことができることを見てきました。  同時に、生物のニューロンをシミレートした、コンピュータ上の状態 x のニューロンは、 x <= 0 の時には、何も反応しないが、x > 0 の時には「発火」して、信号 1を他のニューロンに出力するということも見てきました。 Activator φ は、ある条件のもとで、ニューロンを活性化して、ニューロンの状態xをニューロンの出力φ(x)に変え、その出力を行う関数です。 基本的なActivator φは、x > 0 の時、φ(x) = 1 を出力し、それ以外の場合には φ(x) = 0 を出力します。( 0 を出力するというのは、ニューロンが活性化されずに何もしないことだと考えて構いません。) ただ、この基本形以外のさまざまなタイプのActivatorがあります。それについては、セッションの前半で紹介しています。 今回のセッションの後半では、もう一つの重要なActivatorである、SoftMaxを紹介します。 前半で見たActivatorは、一つのニューロンについて、その状態をそのニューロンの一つの出力に変えるものだったのですが、softmaxは少し違っています。それは、複数のニューロンの状態にまたがって作用するActivatorで、しかも、複数のニューロンごとに出力を行います。 SoftMaxは、引数にN個の要素(ニューロンの状態です)からなるベクトルを取り、N個の要素からなるベクトルを出力します。その出力はN個の要素からなる「確率分布」です。 面倒くさそうですが、例えば、7次元のベクトル a = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]から、そのSoftMax を計算するPythonコードは、次のように簡単なものです。  >>> import numpy as np  >>> a = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]  >>> np.exp(a) / np.sum(np.exp

ニューロンの働き -- ニューロンは、いつ発火するのか?

【 ニューロンの働き --  ニューロンはいつ発火するのか? 】 今回のセッションも、生物のニューロンの働きの話です。今では、人工知能技術と生物のニューロンとの関係は、ほとんど意識されることはないとおもいます。 しかし、人工知能研究は、歴史的には、生物のニューロンの基本的な働きをシミレートする擬似的な「ニューラル・ネットワーク」を機械の上で再構築しようというさまざまな試みから始まったものです。知能へのこうしたアプローチは「コネクショニズム」と呼ばれ、活発な研究が行われました。ただ、現在の到達点から見れば、その達成はプリミティブなものに見えるかもしれません。 現在の人工知能技術へのブレークスルーは、機械上の「ニューラル・ネットワーク」を、大量のデータで学習させる機械学習技術の上で起きました。その機械学習技術を「ディープラーニング」と呼びます。それについては、この連続セミナーの第二部、「ニューラル・ネットワークは、どう「学習」するのか?」で、少し詳しく紹介したいと思います。 現代の人工知能技術は、生きているニューロンとは別の世界で独立に発展を始め、現代の脳研究も、コンピュータ上の知能研究とは独立の道を歩いているようにみえます。ただ、今回のセッションは、生物のニューラル・ネットワークとコンピュータ上の「ニューラル・ネットワーク」は、その基礎の部分では、基本的に同じものであるということがテーマです。 それは、一つのニューロンを考え、それが複数のシナプス経由で信号を受け取り、その信号と各シナプスの状態に応じて、ニューロンが「発火」して、他のニューロンに信号を発するというニューロンの振る舞いは、生物のニューロンでもコンピュータ上の「ニューロン」でも同じだということです。 脳の働きが、脳を構成する無数のニューロンの働きに帰着するのは確かなことだと思います。ただ、脳はとてつもなく複雑です。それにしても、いずれ、両者が合流し、脳研究の成果が、未来の人工知能研究のブレークスルーにつながるかもしれないと考えるのは楽しいことです。 ------------------------------------------------------- ビデオ「 ニューロンの働き --  ニューロンは、いつ発火するのか? 」を公開しました https://youtu.be/_9VW2fvNlRI ?l

「ChatGPTと大規模言語モデル関連ページ」公開しました

イメージ
【「ChatGPTと大規模言語モデル関連ページ」公開しました 】 この間 マルレク+MaruLaboが行ってきた ChatGPTと大規模言語モデルに関連したセミナーのリストをまとめた「ChatGPTと大規模言語モデル関連ページ」を作りました。関連するセミナーのまとめページに簡単にジャンプできます。ご利用ください。 https://www.marulabo.net/docs/chatgpt-llm/

5月のセミナーの講演ビデオを公開しました

イメージ
  【 5月のマルレク「GPT-4 Technical Report を読む」の講演ビデオと講演資料を公開しました 】 5月に開催したセミナー「GPT-4 Technical Report を読む」は、今年(2023年) 3月に発表されたOpenAIのレポート"GPT-4 Technical Report" を紹介したものです。このレポートは、現在のいわゆる「生成AI」技術の到達点と問題点を知る上で、もっとも基本的なドキュメントの一つだと僕は考えています。 このOpenAIのレポートは、少し奇妙な構成をしています。"GPT-4 Technical Report" と名付けられたレポート本体の「付録 Appendix」に "GPT-4 System Card" という奇妙な名前の別の論文が添付されています。しかもこの付録の文書の方が、本体の文書よりはるかに大きいのです。 問題は、付録の文書の大きさではありません。 この "GPT-4 System Card" は、その冒頭のAbstractで次のように述べます。 「このSystem Cardは、GPTファミリーの最新LLM、GPT-4を解析する。このモデルの限界(微妙に偽りのある説得力のある文章を作成する)と能力(不正なアドバイスを巧妙に提供する、商業的だけでなく軍事的にも両面で性能を発揮しうる、非常時の危険な振る舞いなど)がもたらす安全上の課題を明らかにする。  ・・・ 私たちの緩和策やプロセスは、GPT-4の挙動を変化させ、ある種の悪用を防ぐことができるものの、その効果は限定的で、ある場合には脆いままであることを実証した。これは、先を見越しての計画とガバナンスの必要性を指摘するものである。」 この文書は、GPT-4の脆弱性を「実証」し、さらなる対策の必要性を指摘した重要な文書なのです。残念ながら、この文書の重要性は、あまり広く知られていないように思います。 自分の仕事にとっての生成AIの「能力」にだけ関心のある人が、生成AIが他の分野でもたらす可能性のある「安全性への危険」に大きな興味を持たないのは、ある意味仕方がないことかもしれません。 しかし、その点では、僕は、OpenAIが "GPT-4 Technical Report