生成AIのしくみ(私の勉強ノート)

※ 当サイトではアフィリエイト広告を利用しています。リンクは広告リンクも含みます。

この記事は約21分で読めます。
広告

「ChatGPTは、OpenAIによって訓練された大規模な言語モデルです。このモデルは、自然言語処理タスクに使用され、文章の生成、翻訳、質問応答などを行うことができます。」
と言うのが一般的な説明ですが何のことか分かりません。
この記事はDeepLeaning→ChatGPTという形で勉強するとよかったので、
素人の私の、にわか知識の推論をはさみつつ、
言語モデル(ChatGPT)及び画像生成AIの仕組みを勉強するために利用したものをまとめたものです。

「Vプリカ ChatGPT」みたいなワードで検索してこちらに来た方は、VプリカでChatGPTが支払えるかの情報は、こちらの記事では分かりません。Googleが勝手に結びつけています。すいません。

まずChatGPTに聞いてみました。

質問:ChatGPTはディープラーニングですか
ChatGPT:はい、ChatGPTはディープラーニングモデルです。

ディープラーニングが、ある程度わかる人は、
ChatGPTの仕組みのおすすめYoutube」に貼ってある動画を見ると良いと思います。

広告

Deep Learningの勉強におすすめYoutube

まずDeepLeaningについて勉強するのにおすすめYoutubeで、この3本で結構、学びがありました。

「何の加工もされていない生の入力データから所望の出力が直接得られるように学習したほうが(end-to-end)で解いたほうが高い性能が期待できるというセオリがあります。これは人間が前処理や後処理を設計するよりも、すべての処理をニューラルネットワークにまかせてデータから学習してしまったほうが前処理に相当する処理もニューラルネットワークはデータから自動的により適したものを獲得していくことができるという理由です。」引用元実践Deep Learning:波形データの入出力

この言葉が私の中でポイントになりました。それで以下(私の考察)のように考察しました。
(追記)同じシリーズの後半のDeep Learning入門:Attention(注意)で否定されている。
そこまで見ると、そこで解説されている通りend-to-endでは
特にデータ数が少ないと柔軟性がなくなることが分かった。

Able Programmingさんの【深層学習】深層学習とは?|ディープラーニングの意味、ニューラルネットワークもディープラーニングに関して何も知らなかったときに見て
イメージをつかめましたので、おすすめです。

私の考察

この章はChatGPTを知った直後に、いろいろしらべた私の考察です。当然間違っているので、飛ばしてもいいですが、軽く読んでみてください。
初心者目線ゆえ初心者の人の理解の役に立つかなと思いました。

初心者の妄想です。
入力に対する正解(出力)のデータセットがたくさんあれば、あとは力わざ(コンピューターの性能等)で高性能なAIができると思いました。

英語から日本語の翻訳は、そこら中に人間が訳したデータセットがあります。
例)This is a pen.→これはペンです。
これを入力、出力として、途中の過程を人間があれこれ気にせず、ひたすら学習させれば翻訳機ができそうです。

しかしChatGPTは日本語で聞いたら日本語で返答します。同じ言語の場合、質問と回答のセットしか学習に使えるものがないような気がしたので、誘導尋問的にChatGPTに聞きました。

質問:ChatGPTは質問応答のデータセットを使っていますか
ChatGPT:はい、ChatGPTは質問と回答を含む大量のテキストデータをトレーニングデータとして使用しています。これにより、質問応答タスクにおいて適切な回答を生成することができるよう学習されました。

質問:具体的に教えてください
ChatGPT:ChatGPTはOpenAIが開発したAI言語モデルで、テキストの生成にディープラーニングを使用します。トレーニング中に、質問と回答を含む大量のテキストデータに暴露されました。これにより、質問に対する適切な回答を生成することができるよう学習されました。

具体的には教えてくれませんし、これ以上つづけても答えは得られるような気がしません。

日本語の質問と回答のデータセットで思いつくのはこれ。
質問:日本一の山は? 回答:富士山
こんな感じのデータセットを作るのか?クイズとか学校の問題集とかあるけどそれを使うのか?でもそんなんじゃ数少ないし他に日本語の質問と回答のセットがたくさんあるとは思えません。

そこで思ったのが
英語と日本語の翻訳も英語を質問、日本語を回答と考えれば、質問と回答の関係になっています。人間が英語と日本語と分けているけどコンピューターの中では数字なので質問と回答の関係に色はありません。これで学習させておけば日本語で聞いたら日本語で返すかもしれません。ChatGPTに日本語で聞くと、たまに英語になるのも怪しいです。日本語と英語に限ったはなしではなく、いろんな言語で翻訳データはあるので、これを一色単にするといっぱい質問と回答のテストデータができます。普通に考えると、こんなデータで日本語の対話型はできないような感じがしますが。
コンピューターからしてみれば今、翻訳している。今、対話しているなんて切り分けてない。ただ入ってきた数字に対して出力に適した出力を推論しているだけ。
ということでChatGPTは翻訳機みたいなものではないでしょうか。(どや顔で結論書いたけど)

1日後。

あ!チャットのやり取りとか、返信を正解にすれば成り立つか。あとネット上にQ&Aとかいっぱいあるか。yahoo知恵袋とか。ただの文章からだと質問と正解というふうにはわけれないと思うので、その辺を利用しているのか?→(実際は、ただの文章で、後に続く文字を隠したものを「質問」、隠さないものを「正解」という感じで、文章の次に来る単語を学習させてるみたいです。)

あとは余計なことしないで。余計なこととは人間にとって意味のある名詞などの品詞分けや前後の文脈を意識して処理すること。実際どうやっているかは分かりませんが、ここは複雑にならないように説明するためと、ディープラーニングのだいご味でもあるので、あえて以下のようなデータセットで説明します。

質問:日本一の山は?→「日、本、一、の、山、は」と一文字ずつ分解して入力
回答:富士山→「富、士、山」と一文字ずつ分解して出力とする。
ていうデータセットをいっぱい作って、こういう結果になるように学習させる方式だったら理解しやすいんだけど。
さすがに一文字ずつでは意味を持たないので単語単位でやっていると思います。英語なんかは単語単位でスペース開いてるので分けやすい。日本語も形態素解析という名前で、分離する技術は確立されてるし。文章なんて画像のデータ量より圧倒的に少ないんだから、いけそうな気はします。逆にデータセットの量が必要になるのかもしれないけど。

実際の運用は入力された値に対して学習したパラメータを使って、四則演算(違うかも)して出力してるだけ。

複雑なようで結構単純なんだよな~。
入力から出力の間のしくみ、パラメータを決定する方法も、難しい専門用語や数式がでてきます。でもYoutubeでわかりやすく解説していただけるのを聞いてると、そんなに難しくはありません。要するに入力されたデータ(コンピューターの中では数字)を正解の数字になるように変数(パラメター)を決定する。しかも与えられたデータセット全部で正解がでることを目指しています。そうやって作られたパラメータを使って未知の入力に対して計算して出しているだけです。

電卓が登場したときもキラキラしていました。能力だって=ボタンを押したところから人間とスピード勝負するんだったら50年以上前から人間を超えていたと思います。今は100円ショップで売ってます。でもその構造はとても難解です。AI技術も今までの技術の蓄積でできたと思うので特別扱いするのも変な気がします。

電卓は1+1=2など不変のルールで動いているので入力した値に対する答えは正確です。
ディープラーニングはどうかというと多量の質問と答えのデータセットから学習したパラメータを使って入力した値を計算し出力しています。学習するデータセットが1+1=2のほかに答えが3,5,10といった間違ったデータセットをもとに学習したら1+1=2とは答えられなくなります。質問と答えの関係は重要になってきます。なので何をもって正解かわからないデータを多量に学んでも、そのデータをもとにした答えしか返ってきません。

電卓みたいに正解を返してるわけではないことは認識していたほうがいいと思います。

仕組みを知るとChatGPTやAI技術ってコンピューターが自分で勝手に考えてるみたいないイメージは持たず入力値を計算して出してるだけの機械だなってイメージになると思います。

以上、しろうとの私がディープラーニングには質問と回答のデータセットが重要だというところから推論しました。

ディープラーニングとは(私の認識)をまとめると

  • AIの本体はモデル
  • モデルはたくさんのパラメータを持っている
  • 入力値をモデルに入れると出力値がでてくる
  • 入力値と出力値のセットを用意する。入力に対して、それに相当する出力がでるように中のパラメータを決める。(学習)
  • 理想は全ての入力値と出力値の関係が保持されるようにパラメータが決まる。
  • このようにしてできたモデルに未知の入力が入ってきたら、出力は学習させたデータセットと同じ入力値と出力値の関係になるような出力が出てくる。

モデルは固定なのか

学習し終わったパラメータは更新されないのか気になったので以下質問してみた。ファインチューニングという言葉で質問した。ChatGPT3.5(2023/3質問)

質問:今私が利用しているChatGPT(あなた)はファインチューニングされていますか。
ChatGPT:私はOpenAIが公開している大規模な事前学習済み言語モデルChatGPT-3をベースにしており、そのままの状態で利用されています。私自身は、ユーザーからの入力に応じてChatGPT-3が生成した文章を返すことができます。

ということで、みんなが使って、その都度、モデル(パラメータ)を更新してかしこくなっているわけではなさそうです。

ChatGPTの仕組みのおすすめYoutube(2023/前半に見つけたもの)

今項は2023/前半に見つけたYoutubeで2024/5時点では次項で紹介しているものもおすすめです。

こちらの解説動画は、ChatGptについてかなり疑問点がクリアになると思います。
AIcia Solid ProjectさんのYoutubeはハードルが高いです。(数式、見るとめまいがする。😂)最初から見てると、ここまでたどり着けない人が多いかもしれない。この回たちが埋もれてしまうのはもったいないのでご紹介。リンクで貼ったところはあまり知識がなくても分かりやすい部分です。なおかつ疑問に思っている人が多いところではないかと思うので必見です!3、モデルはハードル高くなるけど見たほうがいいです。

こちらはGPTではなくBERTですが同じく分かりやすい部分ですので必見です!
AIcia Solid ProjectさんのYoutubeにGPT3もありますね。これもおすすめです
というか今見直したら、最初からわかりやすかった。全部おすすめです。でも中盤かなりつらい。前の回の知識なしでもわかる話もあるので飛ばして見ても大丈夫かも。

Pythonに興味が出たら、こちらも参考にしてください。

ChatGPTの仕組みのおすすめYoutube(2024/5~追記)

いろんな方の説明を聞くと、いろいろ補完できて理解が深まります。
2024/5/22追記
こちら具体的なのでGPTの仕組みが分かりやすいです。リンクは具体的な部分からになっています。

これもおすすめ→GPTとは何か Transformerの視覚化 | Chapter 5, Deep Learning
同じchのこちらもおすすめ
ニューラルネットワークの仕組み | Chapter 1, 深層学習(ディープラーニング)
2からちょっと難しい。

Transformerについて具体的でわかりやすい
LangChain ◀︎ Transformer ◀︎ 数学・深層学習|初心者でも大丈夫!実務でも研究でも戦える強靭な足腰を作る
GPT-4o × LangChain|プロフェッショナルへの超実践講義
おすすめ!Transformer誕生物語|Attention is All You Need

AIcia Solid ProjectさんのこちらもGPTについてポイントがまとまっていていいです。
去年は分からなかったけど3Blue1BrownJapanさんの視覚化された説明のあと見ると
実際のイメージが湧くのでGPTのしくみや用語の理解が深まります。
古い話や基礎的な話を知らないと新しい話についていけないと改めて思いました。
【深層学習】GPT – 伝説の始まり。事前学習とファインチューニングによるパラダイムシフト【ディープラーニングの世界vol.31】
【深層学習】GPT-2 – 大規模言語モデルの可能性を見せ、社会もざわつかせたモデルの仕組み【ディープラーニングの世界vol.33】

Microsoft Azure OpenAIを使うことになるのか?

(追記)2024年現在、Microsoft Azure OpenAI以外に、いろんな選択肢があります。
無料APIもあるので色々、試せます。無料APIを実際に使ってみました。
https://kikuichige.com/category/ai

ChatGPTのAPIをGoogle Colaboratoryなどで使えるが、実際のアプリで利用しようとすると、どうすればいいのか分からない。そういう時に、これを見るとヒントがあるかも。Azure OpenAIを使うのをおすすめしているわけではないですが、どうすればいいか考えやすくなると思います。

この記事を書いたイチゲを応援する
Vプリカでのお支払いがおすすめです。

こちらの記事も参考になります。https://eng-blog.iij.ad.jp/archives/18386

画像生成(StableDefusionなど)のしくみでおすすめYoutube

画像生成は、どうなっているんだろうということで学習中。
画像生成よりもマルチモーダル(画像、文字、音声を組み合わせること)入力について知りたいが、
そのためには画像生成の知識も必要かと思って。
Deeplearning基本はhttps://youtube.com/playlist?list=PLg1wtJlhfh23pjdFv4p8kOBYyTRvzseZ3&si=QeB0HOU9WZTExxgv
画像関係の用語も出てくるので、まずは押さえておきたい内容です。
マルチモーダルに似た?マルチタスク学習は私の知りたかったことの答えかもしれない。

まだ理解できていませんが何度も見ようと思ってるものをご紹介します。
別角度で解説されたものを多数。ある動画で分からなかっとことが
他の人の説明で補完できることがあります。
 https://youtu.be/xvaB1Xbwo7Q?si=xCuw3-tvwr9k4oXY
潜在ついて分かりやすい。画像生成につきもののノイズの話がなぜ出てくるかもわかります。
ただ拡散モデルの話で出てくるノイズの話とは分けて考えたほうがいいかも。
→ https://youtu.be/rZloKt6Z7vw?si=CG0FljyyDiQsHI3d
 https://youtu.be/aNdb_RUxtOM?si=A7haAucsmq5FNZlD
 https://youtu.be/8AV1qyZmzIo?si=oGJU7beFsFDnTORm&t=984
 https://youtu.be/XcQd4ltSkbs?si=dHokjZgBX-deFvfh
VAEと潜在変数の説明
https://youtu.be/EFMBFGPBGpU?si=yN4L5oNCaZyjI5IC

画像にノイズを書けるとは?

結構、簡単な話だった。
ノイズ除去にディープラーニングが必要なのは、ランダムにノイズが掛かっているからなんだな。

単純な白黒画像(グレースケール画像)を使って、ガウシアンノイズの生成と適用を具体的に説明します。

必要なライブラリのインポート

import numpy as np
import matplotlib.pyplot as plt

元の白黒画像の生成

# 100x100の白黒画像を生成(すべてのピクセル値が128、すなわち灰色)
original_image = np.full((100, 100), 128, dtype=np.uint8)

# 元の画像を表示
plt.imshow(original_image, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.show()

ガウシアンノイズの生成

# 平均0、標準偏差10のガウシアンノイズを生成
mean = 0
sigma = 10
gaussian_noise = np.random.normal(mean, sigma, (100, 100))

ガウシアンノイズを画像に加える

# ノイズを画像に加える
noisy_image = original_image + gaussian_noise

# ピクセル値が0-255の範囲に収まるようにクリップ
noisy_image = np.clip(noisy_image, 0, 255).astype(np.uint8)

# ノイズを加えた画像を表示
plt.imshow(noisy_image, cmap='gray')
plt.title('Image with Gaussian Noise')
plt.axis('off')
plt.show()

説明

  1. 元の白黒画像: 単純な灰色の画像(全てのピクセル値が128)を生成します。これは均一な明るさの画像です。
  2. ガウシアンノイズの生成: 平均0、標準偏差10の正規分布に従うノイズを生成します。このノイズは正規分布に従い、ほとんどの値が0に近いですが、一部の値は正または負の方向に離れる可能性があります。
  3. ノイズの適用: 元の画像にノイズを加えます。これにより、画像の各ピクセル値がランダムに増減します。例えば、あるピクセルの元の値が128だった場合、ノイズが5であれば、そのピクセルの新しい値は133になります。逆に、ノイズが-7であれば、新しい値は121になります。
  4. クリップ: ピクセル値が0から255の範囲に収まるように調整します。これにより、画像として適切な範囲内の値に収まります。

結果

元の灰色画像にランダムなガウシアンノイズを加えることで、画像がざらざらとした見た目になります。これがガウシアンノイズの効果です。以下に元の画像とノイズを加えた画像の例を示します。

元の画像

ガウシアンノイズを加えた画像

このように、単純な白黒画像にガウシアンノイズを加えると、ピクセルごとにランダムな変動が生じ、全体的にざらついた画像になります。

考え方(私、しろうとの個人的、思いつきメモ、誤解多数あるはず)

ディープラーニング

・ニューラルネットワークはベクトルを変換していく装置。
・ベクトルは多次元でも2次元や3次元のイメージでいい。
・ベクトル=特徴量と考える。
・ブロック図で示す線は、情報(特徴)を持ったベクトルが、そこにつながると考える。
・単語をベクトルに変換する(ベクトル空間に埋め込む)ために
文章の次に何の言葉が来るかで学習させたモデルを使う。
・その結果、単語(トークン)に対し特徴の情報をもった多次元ベクトルができる。

Attension

・1単語(1トークン)に対するベクトルだけでは文脈(他の語との関係性)を
 そのベクトルに盛り込むことができないので
 文脈も吸収できるベクトルを都度つくる機構(Transformer?Multi-Head Attention?)をもうけてある。→おすすめ【Transformerの基礎】Multi-Head Attentionの仕組み
視覚的に作りこまれているこちら、おすすめ!
GPT解説2 アテンションの仕組み (Attention, Transformer) | Chapter6, 深層学習
・Multi-Head Attentionは類似性や内積という言葉で、ある単語と文の他の単語との類似性を求めることが、なぜ重要なのかと疑問が出てくるが、ある単語と文脈(文全体の関係性)を盛り込めるところがポイントではないかと思った。
こちら画像処理の話ですが、見たあと、言語の場合も全体との関係をベクトルにしてるようにも思えました。
→トランスフォーマー(ViT)による物体検出 ざっくり解説
画像だと線形変換のイメージが湧きます。
トランスフォーマー(ViT)の中身 ~ Multi-Head Attentionを画像処理で解説 ~

コンテキストサイズを超える文章の入力

言語モデルは、同じセッション内での新しいプロンプトに対して、これまでの会話のすべてのコンテキストを利用して推測します。ただし、以下の点に留意する必要があります:

  1. コンテキストの完全性:
  • モデルはセッション内のすべてのコンテキスト(以前のプロンプトとその応答)を利用しますが、コンテキストサイズの制限を超える場合、最も古い部分から削除されることがあります。このため、必ずしもすべての履歴が含まれるわけではありません。
  1. 推測の基礎:
  • 新しいプロンプトに対する応答は、可能な限りこれまでの会話の流れを考慮して行われます。つまり、前のやり取りに基づいて文脈を理解し、その文脈に基づいて新しいプロンプトに応答します。

例として、以下のような流れを考えます:

  • プロンプトA: 「こんにちは、今日はどんな天気ですか?」
  • 応答A: 「こんにちは、今日は晴れです。」
  • プロンプトB: 「昨日は雨でしたか?」
  • 応答B: 「はい、昨日は雨でした。」

この場合、次のプロンプト(例えば、「明日はどうなりますか?」)に対して、モデルはプロンプトA、応答A、プロンプトB、応答Bのコンテキストを考慮して応答を生成します。

したがって、同じセッション内での新しいプロンプトに対する応答は、これまでの会話の全体的な文脈をできる限り利用して行われます。ただし、コンテキストサイズの制限を超える場合、古い情報が削除されることがありますので、その点に注意してください。

・特定の記事などを指定して、その文に対して要約などを行えるが、どうやってるのか。
言語モデルに入れられる単語(トークン)数は多分コンテキストサイズ(GPT3の場合コンテキストサイズは2049)以上は入れられない。そこでChatGpt4oに聞いた。

ChatGPTの答え:
おっしゃる通り、言語モデルにはトークン(単語や文字列)数の制限があり、GPT-3の場合はコンテキストサイズが2049トークンです。この制限を超える入力に対して要約や他の操作を行う方法にはいくつかの工夫があります。

長文テキストを扱う方法
スライディングウィンドウ方式:
テキストを小さな部分(ウィンドウ)に分割し、各部分を個別に処理します。例えば、2049トークン以内の部分に分けて、それぞれを要約した後に、その要約を再度統合して要約します。
重要部分の抽出:
事前にテキストの中から重要な部分(例えば、段落の最初の文やキーワードが含まれる文)を抽出し、それを要約の対象とする方法です。
段階的要約:
テキストを段階的に要約する方法です。例えば、最初に各段落を要約し、その後に段落ごとの要約をさらに要約するという手法です。
外部ツールやスクリプトの活用:
長文を分割し、各部分を個別に処理するためのスクリプトやツールを使用することができます。例えば、Pythonスクリプトを使って長文を適切なサイズに分割し、各部分をモデルに入力する方法です。

質問:ChatGptでファインチューニングはできるのか(後述、ChatGPTとGPTは同一であると私が誤解してた
ChatGptの答え:ファインチューニングの現状
OpenAIは、GPT-3やGPT-4などのモデルに対してファインチューニングを行うためのAPIを提供していません。これらのモデルは、トレーニングデータセットの大規模さと計算資源の制約により、ユーザーが独自にファインチューニングすることが困難です。

質問:ChatGPTとgptは違うものか。
ChatGptの答え:ChatGPTとGPTは関連していますが、異なるものです。
ChatGPTはGPT技術の応用例の一つであり、特に対話に特化した形で使用されています。

質問:GPTはファインチューニングできるか。
ChatGptの答え:はい、GPTモデルはファインチューニングが可能です。

実用的なのはRAGみたい。
質問文と特定の記事の関連している部分を探す機構を追加して、
その結果でLLMに入力するプロンプトを作っているみたいです。
これについては前にも触れた数理の弾丸さんの
こちらが、おすすめhttps://youtu.be/3I-e70ZzHLM?si=KaQjBfjRkCADeR_k&t=3122
BingのこれとかCursorでコードについて質問できる機能はRAGなのかもしれない。
でもプログラミングのコードについて質問する場合、
RAGを使わないでプロンプトでコードと一緒に質問文書いて
直接LLMに聞いたほうがいい答えが返って来そうな気がする。

あとがき

以上「Chatgpt ディープラーニング」について私なりに調べた結果でした。

私の場合、課金の可能性があるものは怖くて近寄らないようにしてるのでChatGPTの API(プログラムでプロンプトのやり取りができる)は今のところ使わないです。英語サイトだしプログラムに入れてミスったときのことを想像してしまいます。リミット設定があるとはいえ躊躇します。初心者の人はYoutubeとかで人が使っているの見るぐらいでやめといたほうがいいと思います。

ディープラーニングについてPyTorchで1個作ったら、学習、モデル、パラメータの意味が多少理解できました。しかしPyTorchで学習進める前にChatGPT(無料版)やBingでできることを理解したほうがいいと思いました。結局、大手の競争。しくみは同じで学習させるデータ量とパラメータ数、勝負なのかなと思ってます。機能を維持したまま最新情報に学習させるには、どのくらい期間がかかるのか?半年開発を停止してとか、お願いしてるのもこのせいなのか?発表されるニュースが限定した条件で動いていて、モリモリに発表されていないか?自分で動かして確認かな。あと、ほぼ中身は大手のAIなのに別の名前で出てたり、自称AIだけど中身は単純なプログラム、怪しい謎理論、謎システム、手法には気を付けようと思いました。(まじめなちゃんとしたものなのか、課金だけが目的なものなのか、判断できない)
「プロンプトエンジニアリング」というキーワードにもこだわるのではなく(本当に使えるものかどうか分からないから)、「しくみ」に重点を置いていこうと思います。
またモデルについても色々浮気せず無料で信頼できるChatGPT(無料版)とBing、Geminiで実験するのがいいと思ってます。

Azure OpenAIちょっと調べた。REST APIとか試してみたいけどAZUREとかクラウドサービスって無料で、どこまで使えるのかよくわからないんだよな~。

この記事を書いたイチゲを応援する
Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)

コメント

タイトルとURLをコピーしました