理乃美

ソフトとハードと論理の覚え書き

GPTでジオン公国のワインを講釈してみる

2024-07-25 01:02:49 | AI
引き続いて、Generative Deep Learning [1] の 9章 Transformers のサンプル (gpt.ipynb)[2]を実行。
これは、種々のワインのレビュー文をGPTモデルで学習して、ワインのレビュー文章を生成してみるというもの。
fitにかかった時間は、GPU (RTX A2000)を使って7分ほどだった。
生成される文章は例えば、「wine review : germany」と与えて、その先を生成させると「wine review : germany : mosel : riesling : smoke and mineral tones lend a savory tone to this intensely fruity riesling . it ' s intensely concentrated with flavors of sweet tangerine and orange , but it ' s a lip - smackingly juicy , full - bodied riesling .」といった文章が生成される。
生成の経緯を見るとwine review : germany : の続きはワインの銘柄が来る場所で単語選びにも germany が重視された結果 mosel が選ばれている。
その先に進んで、smoke and の続きを選ぶ場合は smokeを重視しているが、smoke and mineral の次を選ぶ場合は wine review であることや germany も考慮しての選択となっている。

以前に実行したLong Short Term Modelでは、これまで全体として何を語ってきたのかを示すlong term の情報と今を語りかけているのかを示すshort term の情報を常に同じ重さで扱って単語を綴っている。そのためだろう、生成している文章が長くなってくると次第に文章がおかしくなってゆく。
Transformerでは、位置の情報を組み合わせることで、直前の言葉から流れのままに綴るところとそもそも何を語っているのかに立ち戻って言葉を選ぶところが組み合わせれ、生成する文章が長くなっても破綻しにくいと理解した。

さてサンプルでは、ドイツ産のほかに US産やイタリア産ワインのレビュー文を生成させているが、架空のジオン公国産 についてレビュー文を生成させたらどうなるだろうか。試した結果はこのとおり。産地としては歴史が浅いのだなあ(w)

wine review : zeon : [UNK] : cabernet sauvignon : this is a bold , ripe and full - bodied expression of the variety ' s characteristically cabernet sauvignon . aromas of blackberry , plum and cassis , with a touch of wood smoke and spice , while the wine is still young and needs time to open up . drink from 2018 .

なお、[UNK] は学習データ中にあった未知語. ここはワインの名称が来るとところだが、どの単語も尤度が低すぎた結果として 未知語が選ばれてしまったのだろう。だが、その後に cabernet sauvignonが改めて選ばれて、カベルネ・ソーヴィニヨン を軸にレビュー文が組み立てられたようだ。

[1] Generative Deep Learning, 2nd Edition by David Foster, Released May 2023, Publisher: O'Reilly Media, Inc. ISBN: 9781098134181
[2] https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Denoising Diffusion Modelsはスケジュールの良し悪しが胆!?

2024-07-02 00:19:41 | AI
引き続いて、Generative Deep Learning [1] の 8章 Diffusion Models のサンプル (ddm.ipynb)[2]を実行。

このような画像を学習するのに、fitにかかった時間は、RTX A2000 (6GB) をGPUに使って1時間38分ほどかかった。
最初はこんなところだが、
Epoch 8になるとこの様になんとなくそれっぽい画像を生成し、
Epoch 19では、ここまでの画像を生成するようになった。
Epoch 50の学習終了で、最終的にはこのようなリアルな画像が生成できるようになった。

Denoisingで画像が改善されてゆく過程の例がこちら。
また、内挿で連続的に変化する画像を生成した例がこちら。

と、ここまではサンプルをそのまま実行しただけ。
この章では、ノイズを載せるプロセスで、linear, cosine, offset cosine の三つのスケジュールが紹介されていて、前記はoffset cosine での結果。
サンプルコードには、linearやcosineのコードもあるようなので、試してみた。
まずは、linear を試してみた。最初 (Epoch 2)がこんななのは当然として、

それが、最後のEpoch 50でもこんな感じのまま。
TensorBoardでみたepoch_n_loss がこのようなので、まったく学習が働いていないわけではないはずなのだが。
次に、cosine を試してみる。
cosineの場合、Epoch 8になるとこのように何らかの画像らしきもを生成するようになるが、
そこから先は、Epoch 50になっても大して向上していない。
最終的に生成できるようになった画像がこちら


linear や cosineのスケジュールでも結果を出すにはどうすればよいだろうか。このサンプルでは64ステップだが、ステップ数を増やして細かく学習させたらどうだろうか。ということで、BATCH_SIZEを 128にして cosineで試してみたのがこちら。学習に6時間14分を費やして、最終的に生成するようになった画像だが、あまり改善した印象はない。
さてここで、n_lossの視点で比較整理してみるとこうなる。生成する画像では実感できないものの、ステップ数を増やすことでn_lossは確実に改善される。128からもっと増やせばlinearやcosineでもよい結果を出せるのだろうが.. 6GBしかメモリを積んでいないRTX A2000 ではここが限界。CPUのみの方で実行すればもっと増やせるだろうが、実行時間がねぇ...
なお、この図でX軸 (epoch数)は対数表示であることに注意。この感じからすると、10 epochもやれば結果は見えたようなもの、かな。


実際にやってみて思ったのだが、筋のよいアイディアを思いついたとしても、そこから先、実際に良い結果を出せるところまでがまた長いなと。一つすごい成果が出た後にわらわらと後追いが出てくるが、これは、実際にできたのが居るのだから私だってできるはずと頑張った、という事なのかもしれない。

[1] Generative Deep Learning, 2nd Edition by David Foster, Released May 2023, Publisher: O'Reilly Media, Inc. ISBN: 9781098134181
[2] https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする