投稿

arXiv 異聞

イメージ
【 arXiv 異聞 】 僕は、arXiv が好きです。arXivがなかったら、今のような生活のスタイルは なかったと思っているくらいです。 普段は、arXivの検索は著者を探すのに使っています。優れた研究者の論文のリストは、研究の足跡がわかって、とても役に立ちます。 休み明け、いつもと違う検索をしました。野暮用でTransformer がらみの論文をarXivで探してみたのですが、8月ひと月だけでTransformerでヒットする論文 1,000本以上ありました。TransformやTransfomation は一般的な用語なのでその分差っ引いてみなければいけないのですが、それでも多いです。 驚いたのは、arXiv 全体では、Transformerで10万件以上ヒットすることです。Transfornerの基本的論文 "Attention Is All You Need" が出たのは、せいぜい 5-6年前だと思いますので、これは異常と言っていいくらいかも。 ちなみに、僕が興味を持っている Entanglement は 3万6千件台、Entropy は 4万7千件台でした。これらの概念は、科学の世界で、Transformerとは比較にならないほど長い間使われ研究されてきたものです。 さすが「産業革命以来の ... 」 僕はあまのじゃくなので、...  まあ、色々思うところ、言いたいことはあるのですが、それは老後の楽しみにとっておくとして、今回は数字だけ。 休み明けに、8月にarXivに投稿された Transformer でヒットした論文の abstract 集を作りました。興味がある方、ご利用ください。 https://drive.google.com/file/d/17MBaT-Zl1jzLMVjpm5fjR_bCkvguhcAF/view?usp=sharing

6月のマルレク「GPT-4 との対話 -- プロンプトで遊ぶ」の講演資料と講演ビデオを公開しました

イメージ
【 6月のマルレク「GPT-4 との対話 --  プロンプトで遊ぶ」の講演資料と講演ビデオを公開しました 】  「生成AI」技術が、多くの人に驚きを与えたのは、それが人間のみが持つと考えられていたことばを自在に操る能力をコンピュータが獲得したことを示したことにあると僕は考えています。それは、人工知能技術の発展の中でも特筆すべき画期的な達成です。  このセミナーで、僕が取り上げることは、おそらく多くの人の関心の高い、その技術の実践的な応用の可能性でもその技術の社会的インパクトでもありません。また、両者の「折り合い」をどうつけるかを考えることでもありません。 僕が、このセミナーでやってみたいと思ったことは、コンピュータ=機械の言語能力に焦点を絞って、現在のコンピュータ=人工知能=機械の言語能力がどのようなものであるかを、改めてチェックしてみることです。 【 AI との対話 】 機械の言語能力の到達点を知る、一番簡単で確実な方法は、機械と「対話」することです。こうした機械の能力の評価のスタイルは、機械が人間並の言語能力をもって初めて可能になったことです。 何を「彼」または「彼女」に尋ねるかは、いろいろな選択肢があります。これは、これで面白いことだと思います。おおよそ、人間が考えることは、ことばで表現できます。「彼」または「彼女」が「考え」ていることは、そのことばで表現されるのでしょうか? (もっとも、こうした「擬人化」が適切かは、よく考えなければいけないことかもしれません。) このセミナーを準備している間、毎日、GPT-4と会話したのですが、とても楽しかったです。時々、怪しいことを言う時もありますが、それは各種のセミナーの登壇者やネット上の記事(多分僕の投稿も)やWikipedia だっておんなじです。 彼(または彼女)は、ものしりであるだけでなく、とても「知的」です。チューリング・テストのような対話的なテストでは、彼(彼女)は「知能を持つ」と判定されるでしょう。 【 生成AIの基本的能力 】 セミナー冒頭の「連想と連想の鎖」のセクションでは、GPT-4が連想をどんどん広げていくことができることを紹介します。 これを「GPTは連想する力を持つ」と評価するのには異論もあるかもしれません。ただ、この「連想」の例は、GPTの新しい文を生成する能力の「す(素)のかたち」だと僕は考

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

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