chatGPTが流行っている中でその仕組みを知りたいと思い、ゼロつく2を買いました。
GPTはTransformerという言語モデルだそうですが、調べるとめちゃくちゃ複雑でこれは到底理解できなさそうだと感じました。
そういえば私は単純な全結合のNNは作ったことがあったけれど、RNNとかは作ったことが無いことに気が付きました。
さらにNNを作ったときは描画を簡単にしたかったのでkuinという言語を使っており、NNのよく見る図を見て自分で書いたために配列でfor文回して計算を一つずつ行っていました。
そのため余計に変数を作ってコピーしたり、行列やクラスも使っていなかったため結構原始的でした。

そこで今回はゼロつく2を読んでpythonで最低限のライブラリ(numpy)を使ってRNNの言語モデルを作ろうと思い立ちました。
やる気がどこまで持つかはわかりませんが、ここに自分のメモを残していこうと思います。

一周軽く読んでいきなりRNNの言語モデルを実装しようとしましたが、やはり無理がありました。
ちゃんと一章のpythonとNNの復習の部分を読んでからやってみようと思います。

本書のソースコード

一章
Softmax関数で少し止まった。
書いてある式と実装が異なっていた。
調べると、
オーバーフローを防いだり、次元によって計算を効率化させているらしい。
読んでで理解しないと。

SoftmaxwithLossレイヤの説明もゼロつく2には載っていないため躓いた。
けれどいちいち細かいところを理解しようとすると進まないため、理解しないと進めなくなったら戻る。



・・・・・・・・・・・・・・




(将来の自分が書くであろう説明部分)























































・・・・・・・・・・・・・・・



そしてGW最終日・・・
やる気がなくなって結局全然できなかった。
もう本読みながらこれを全部書くのは無理だから、最後にコードをそのまま実行して満足しよう!と思ったら、pythonわからなすぎてVSCodeで自作ファイルをインポートすることができないという初歩的なところで終わった。
まじでpythonかんきょうせっていがむずすぎ。もうやだ。

調べたら
https://note.nkmk.me/python-import-module-search-path/
パッケージとモジュールで相対パスによるインポートができたりできなかったりするらしい。
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
これで解決できると思いきや、インポート先でもこのコードを書いていたらエラーが出た。
あとはこれ
https://note.nkmk.me/python-relative-import/
パッケージしないといけないっぽい?
これはめんどくさそうだ。
もう使うファイルを同じフォルダに入れてやろうかな。

8章で同じようにつまづいている人がいました。
https://qiita.com/segavvy/items/69ca97ff2d4e8a7144fd
これだと
sys.path.append('../ch07')
を追加するとできると書いてあったんですが、なんかエラーが消えませんでした。まじむりむずい。

pythonというより環境構築とかライブラリとかの依存関係がいやだ。
Hello Worldからまたはじめていつかこの本にもどってこよう。。。

せっかく4000円もかけて買ったのに・・・

あとモチベーションが維持できなかった理由としては、ただの言い訳にはなりますが、今は大企業が大金をかけてやっとまともに話せる言語モデルが作れる時代です。
そのため個人でどう頑張ってもそれには追いつけないんだろうなぁと思ってしまったんですよね。
ニューラルネットワークを初めて自力で実装した時はゴールが見えなかったので、関数近似ができたらオセロやシューティングゲームにでも応用してみようとか、コードは汚くても自分の思うがままに作っていたので夢中になれたのかもしれません。

だからこそ個人でも簡単に作れるような最も単純な言語モデルを作ろうと思ったんですけどね。
何がしたかったというと、自分で日記とか書いてその文章を自分で作った言語モデルに学習させて、単語を与えたらその単語から自分に関連する単語がランダムにつながって羅列されるようなものです。
ある意味日記を単語で検索するようなもので、連想される単語が出てきてこの単語には自分とこういう関係性が繋がりがあるんだなぁとかわかったら面白そうだなと思ってたんですよね。

こうやってやりたかったことを文字として書き出してみると、昔自分が同じようなことをしていたのを思い出しました。
pythonのTkinterでGUIのテキストボックスを作って、ドロップダウンで日付を選べるようにした日記を作りました。
それでその日記の文章から頻出単語を算出して、その単語をスクレイピングでweb検索して関連した単語を探し出すものを作りました。
自分が何に興味があるのか、その興味はどう広がっていくのかを知りたかったのかもしれないですね。
そう考えると今のtiktokやyoutubeとか、web広告やamazon、twitterとかは自分の興味に関連するものを出してくれるのでハマっちゃうのかもしれないですね。