ニューラルネットワークについて最近知ったこと
CNNの受容野の計算方法。CNNは受容野の中心の特徴をよく取り出すので、CNNの受容野を計算することは重要?
CNNのGANで縞模様が現れる原因についての説明
カーネルとスライドをうまく設定して、重複した部分とそうでない部分があると縞模様が現れると書いてある。
CNNのカーネルが重複した部分とそうでない部分を見分けるために余分に学習しなきゃいけないのが大変だとか。
Conv2DTransposeでは、kernelがstridesで割り切れるようにする。
事象
この定義が、統計力学のエントロピーと似ていることについての考察記事
CNNは5×5を一層より3×3を二層にした方が、関数の形を複雑に出来るので性能が良い。
ResNet
CNNは単に20層以上並べても性能が上がらない。VGG19は19層並べたモデル。
誤差逆伝播法において逆伝搬が20層以上伝搬出来ないためと思われる。
途中で分岐してレイヤーを飛ばす処理を加えることで100層以上の学習を可能にしたのがResNet
層を飛ばすことで実質的にアンサンブル学習になっているのではないかという解釈もある。
Batch Normalization
活性化関数の入力前に値を正規化する。そして、一次関数で変換してずらす。
これによって活性化関数の非線形部分の使い方を学習出来る。
Batch Normalizationは活性化関数の直前で実行する。
多分、直前の方が活性化関数の非線形性をよく引き出せるため。
You Only Look Once: Unified, Real-Time Object Detection
論文: https://arxiv.org/abs/1506.02640
ロス関数に複数の値を足してマルチタスクできるようにしました。って内容かな?
sqrt取ってから二乗誤差計算することで、大きな物体のずれより小さい物体のズレを補正するってのが面白い。
日本語の解説記事。
画像系有名データセットの解説記事。
学習中にloss関数を見てるとスパイクが現れる。その原因の説明。
GAN LAB https://poloclub.github.io/ganlab/
GANの学習プロセスをプロセスを解説するサイト。
DCGANの論文 https://arxiv.org/pdf/1511.06434.pdf
DCGANはLeakyReLU使うと良いって書いてある。確かにLeakyReLUをReLUに変えて学習させると学習進まない。
DCGANの著者がGANの学習方法のコツの記事: https://github.com/soumith/ganhacks
論文には書いてないことも書いてある?
本格的なJupyter on k8s環境の構築方法の解説記事。最後でサラッとJupyterのバグを見つけてpull request送ってるの凄すぎる。
同じ記事。cyberagentはk8sでオンプレ機械学習基盤作ってるのかな?
こういう機械学習基盤で日本語LLMも学習したのかなぁ
機械学習基盤を自社で作れると強いよね。クラウドでも同じようなのを提供してるけど、新たなハードウェアが出た時にそれをクラウド事業者がリリースするのって遅いし、値下げも全然されないしでAIみたいな進展早い分野だとそこで開発競争負けるもんね。まあ、私がAWSでRDSを使うより早くオンプレにデータベースを構築できるオンプレスペシャリストも存在しないので、クラウドも使って開発速度上げることももちろん重要なんだけどね。結局、ITインフラを全てクラウドにお任せできるなんて幻想で、ハイブリッドできる企業が強いんだろうなぁ。分散投資は強い。当たり前の話か。
Tensorflow のfloat16の記事
Tensorflowを新しめのGPUやTPUで動かすと自動的にfloat16に変換するらしい。なのであんまり設定しなくても速いらしい。
この辺の最適化はpytorchだとどうなってるの?
float16では変数が範囲から超える可能性があるから、model.fitでは自動で損失をスケールさせてから偏微分を計算するらしい。
カスタム学習ループを用いる場合でスケールさせたいなら特別な設定しなくちゃいけないらしい。
この辺もPytorchどうなってるの?みんなカスタムループ書いてるけど…
みんな細かく設定してるのかな
TensorflowでModelを継承してtrain_stepを定義した場合どうなるんだろう…
この場合もcompileやfitでよしなにやってくれるのかな
GPU のテンソルコアを使うためには引数を8の倍数にしろって書いてある。
tf-idf (term frequency–inverse document frequency)
文章をone-hotベクトルにする際に、全ての単語を平等に1とするのではなく、重みをつけてベクトルにしたい。そんな時に使われる古くからある手法。
例えば、thisとかisとかaとかが含まれてる文って言われてもなんのことかさっぱりわからないけど、machineとかlearingとかが含まれた文って言ったら文の意味をざっくり取り出せる気がする。それを数値にしたもの。
具体的には以下を掛け合わせて計算する。
tf: 単語の出現頻度 (その単語の出現頻度)
idf: 単語が出現する文の数の逆数(単語が文に現れることの珍しさの指標)
RNNの功績を説いた記事(の日本語訳)
機械翻訳を作るのに良さそうなデータセット
機械学習がうまくいかないときに見るブログ
GPUメモリの見積もり
1billion = 10億
32bit * 1 billion = 4GB
16bit * 1 billion = 2GB
dolly-v2-3b は3billionのモデルなので、float16にすれば6GB使う。(実際にはtokenizerもGPUで動いたりするので、倍の12GBぐらいないと動かないと思う。)
学習時にはGPU上にモデル以外もたくさん乗るので、簡単には見積もれない。
Twitterとかブログとか調べた結果、ざっくり1億パラメータで1~2GBのGPUメモリを食うという印象。(幅が広いのはバッチサイズとか量子化してるかとかに依存するから)例えば、dolly-v2-3b を学習には3billion = 30億なので、30GB〜60GBのGPUメモリが必要。ご家庭の3090や4090では厳しいと思う。1~2billionのモデルは学習できそう。
ざっくりまとめ
推論時: 1billion = 2~4GB
学習時: 1billion = 10~20GB
嘘の可能性あり。
Stable Diffusionの推論において、非常に詳細にメモリ使用量をまとめたブログ。
LLM推論時のメモリ使用量を詳細に調査。
Transformerの最近の研究について
Pre-LNとPost-LNの違いを詳細に検証した論文
Post-LNだとwarm-upが必須で学習を進めるのが難しく。Pre-LNだとwarm-upは必須ではなく学習が簡単に進むらしい。これと同時期に出たGPT-2はPre-LNを使ってるらしい。
transformerの学習手法についてまとめた論文
バッチサイズを上げると精度が上がるとか書いてある。
この原理はGPTにも成り立ってるらしくて、GPT3ではbatch_size=10^6とかで計算してるらしい。GPU富豪しかAI作れない時代。
TransformerのAttentionの次元がlength × lengthになってしまうので、それを減らす論文
GPT3ではこういうを使ってるらしい。
Attentionが重要じゃないかもって話
transformerの置き換え系
RWKV, H3, RetNet
置き換わるのか。
ViT Vision Transformer
Transformerを画像に使った有名モデル
私の記事
CLIP Contrastive Language-Image Pretraining
画像とその説明文のペアを大量に用意する。
学習時には、画像のembeddingと説明文のembeddingの内積が大きくなるように学習する。
推論時には、入力画像といくつかの説明文の内積を計算して、最大の説明文を選択する。
こんな単純なアイデアはうまく行かなそうな気がする。さすがOpenAI、計算力の暴力って感じする。
拡散モデルと非平衡統計力学の関連について興味持ってる人の記事
波動関数のデータセット
Bert系
RoBERTa, ALBERT, DeBERTa
transformer.js
transformerのモデルがブラウザで動く。公式にReactと組み合わせて翻訳作るチュートリアルがある。
以下デモ、興味深い。
仕組み的には、onnxruntime-webを使っている様子。onnxってすごいね。
これって、webgl使ってGPUの恩恵受けられないのかな。
ブラウザでサイトにアクセスするたびに毎回300MBとかモデルをダウンロードできないから、ブラウザに機械学習モデルを呼び出す機能が追加されんだろうね。今のWeb Speech APIみたいに。
そうなったらおもろそう。
mobilenetのonnx runtime webのデモサイト
wasmとwebglが比較できる。
M1Proで試してみたら、webglの方が3倍ぐらい早い。
こういう複数の領域を組み合わせた技術っておもろいよなぁ。ゲームをブラウザで動かす目的で作られたwasmとwebglを、機械学習の高速演算に応用して手元でAIが動くとか楽しすぎ。こういう組み合わせが自由にできることが、ソフトウェア界隈の爆発的な成長に繋がってるんだろうなぁ。
この人が作ってる。頑張ってTransformers.js用に変換してる。
拡散モデルで将棋の学習してみた
学習進むらしい。
LINEが3.6Bモデルを学習させたときの苦労話
このブログの参考文献も面白そう
拡散モデルがモード崩壊しない理由をGANと比較して説明してるブログ。
Retentive Network
Transformerは学習の効率は良いが、推論は効率よくない。RNNは学習の効率は良くないが、推論は良い。2つのいいとこ取りをしたのもの?って思ってる。
ローカルLLM勢の救世主になるかも。
Understanding deep learning requires rethinking generalization (2016)
DLって何で過学習しないの?って調査した論文。
DL輪読会のスライド。(日本語)
(当時の)最新の機械学習モデルは、ラベルをシャッフルしたデータセットを完璧に記憶できるって言ってる。正規化をなくしてもモデルは学習できるとも言ってる。伝統的な統計学的とは根本的に異なると言ってる。
The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks (2018)
宝くじ仮説の論文
この論文を追試してる日本語の記事。
Deep Double Descent: Where Bigger Models and More Data Hurt (2019)
二重降下について真面目に調査した論文
これは日本語の解説記事がいっぱいある。
複素数でニューラルネットワーク
四元数でニューラルネットワーク
何に使うかは謎だけどおもろい。
LLMがどのように知識を蓄えるのか?という問いの論文紹介記事
このテーマ、非常に面白いと思う。
二つのfine tuningしたモデルを組み合わせて、新しいモデルを作る話。
こんな事ができるのか…
Bert, GPT-2, XLNetを用いたテキスト要約AIの記事
XLNetの精度が良いらしい。
AWSはbedrockにtext summaryの機能がある。
AzureはAzure AIにtext summaryの機能がある。
高次元球体の体積は表面に集中する話って機械学習でも現れるの?どういう文脈か気になる。
統計力学で、高次元球体の表面は体積とおんなじっていう近似をした記憶があるんだが、、、
ミクロカロニカル分布からカノニカル分布を導くときだっけか
それと関係あるのかな
AI時代に言語学の存在意味はあるのか?認知文法の思考法
言語学者から見たディープラーニングを語ってる
認知文法の思考法:AI時代の理論言語学の一つのあり方
著者のこの連載が面白い。松尾先生の本を読んで、言語学者の立場から感想を書いてる。
勉強になる。
言語学者はディープラーニング見てるけど、ディープラーニングやってる人は言語学あんまり見てない気がする。
どうなんだろ。見てる人もいるのかな。
ピダハン語
第六回で出てくる
再帰的な構造を持たない自然言語があるらしい。どういう言語なんだろうなぁ。アセンブリ言語みたいな感じなのかなぁ。
そんな言語があるんだなぁ。世界は想像以上に多様でおもしろい。
シンボルグラウンディング問題
第8回読んだ。
うーん。gptはもうその壁超えちゃってない?
この著者の最新の考えが気になる。
個人的には,AIであっても具体的な言語表現を大量に学習することを通して,多くのメタファーを習得することができるのではないかと考えますが,今後の研究成果を待ちたいところです。
もうその壁は超えたと思いますね…
最後まで読んだ
最終的にAI時代には言語を学ぶことの意味が変わると言う話をしている。語学教育ではコミュニケーション手段よりも自分と違う認知の人がいるということを教えるように変わると言ってる。
まあでもそれって語学じゃなくても学べるよね。物理勉強したら、量子状態は人間には認知できないことを学べるし、重力によって時空が歪んでるとかいう直感的には全く信じられない現象も学べるよ。言語で認知の違い学ぶのも一つの手だとは思うけど、認知の違いを学びたいなら普通に文化や歴史学んだほうが面白い気がするけどね
現代って、AIにどれだけ効率的に人間のやりたいことを認知させるかという感じなんだよなぁ。認知できることはすでに前提となっていて、それをどれだけ効率的に伝えるかという感じに変わった気がする。
全体的に言語学者の危機感?みたいなのが伝わってくる面白い文章だった。これまで自然言語を理解できるのって人間しかいなかったわけだけど、それがついに人間以外で自然言語を理解できる者が現れたわけだよね。この現状は言語学者の視点からどう見えているのか、そのへんがもっとしりたい。
あと著者は、ニューラルネットワークが人間の脳を模倣しているから、AIは人間と同じ脳の動きで思考している?的な話をしている気がする。人間の脳はtransformerほど単純でもない気がするけどね。
あとあと、この辺の人間の認知に関する研究って、人が数学を理解するプロセスを研究してるのかな。あの数学特有の「何がわからないかわからない状態」から「何がわからなかったかわからない状態」に移り変わるプロセスとかって名前ついてたりするのかな。
SwishとReLU
dlshougiは学習初期はSwishの方が精度高いが、十分学習すると精度変わらないらしい。
その上で、ReLUの方が推論が速いので、ReLUに切り替えたらしい。
Efficient State Space Model
状態空間モデルをニューラルネットワークにしたものらしい。SSMsとか呼ばれている。
transformerの計算コストを抑える試みの一つとして近年注目され始めているらしい。
まだこれを用いた有名モデルは現れていないという理解。今後どうなるか。
SSMsはこのスライドで知った。
llama-2の論文解説
4096 tokenに対応。
llama-1の2倍。長いコンティストのモデルでも短い文章に対して性能が落ちないみたい。
Llama-2は
RoPE
を使っている。ReFormerってモデルから引用してるみたい。
オリジナルのtransformerはabstract sinusoid PE (訳?:絶対正弦波位置ベクトル化)を使っている。
MultiHeadAttentionのMultiHeadの部分が変更されている。
MQA <- 基本的にこれ
GQA <- 34B 70Bのみ
MQAはMultiHeadのHeadを一つにしたもの。GQAはグループ化してHeadを共通化したもの。
Denseの計算は重いから共通化して改善してるんだと思う。
非線形層も少し違う。
SwiGLU <- LLama-2
GeLU <- ちょっと古いLMはこれ
オリジナルのtransformerはReLUが使われている。
Pre/RMS Norm <- LLama-2
Post/Layer Norm <- Original transformer
Normも違う。Postだと学習が難しいと聞いた。でかいモデルだからPreで学習してるんだと思う。
モデル構造はだいたい理解した。
llama-2って「Attention is all you need」の右側のモデル構造とあまり変わらないことがわかった。transformerは初めから完全された形で生まれてきたっていう話は間違ってないんだなぁ。
どうやらモデルを工夫するよりデータとか学習のさせ方を工夫しているみたい。
temperatureについて
temperatureはGPTの最後の層のsoftmaxで得られる確率分布のパラメータである。
temperatureを大きくすると確率分布がフラットになって、出力が多様になる。
temperatureを低くすると確率分布が鋭くなって、出力が一定になる。
GPTは、自己回帰モデルなので、前回の出力を次の入力として加える。そのため、最後のそうだけ切り替えるだけでもかなり出力が変わってくる。
物理やってた人はボルツマン分布とか正準分布とか思い出すと良い。