Open112

ニューラルネットワークについて最近知ったこと

PONTAPONTA

CNNのGANで縞模様が現れる原因についての説明
カーネルとスライドをうまく設定して、重複した部分とそうでない部分があると縞模様が現れると書いてある。
CNNのカーネルが重複した部分とそうでない部分を見分けるために余分に学習しなきゃいけないのが大変だとか。

https://distill.pub/2016/deconv-checkerboard/

PONTAPONTA

Conv2DTransposeでは、kernelがstridesで割り切れるようにする。

PONTAPONTA

事象i = 1, 2, \cdotsが確率P_{i}で起こるとき、シャノン情報量は次のように定義される。

S = - \sum_{i} P_{i} \log{P_{i}}

この定義が、統計力学のエントロピーと似ていることについての考察記事

https://eman-physics.net/statistic/info.html

PONTAPONTA

分類問題において交差エントロピーを最小化するのはなぜ?交差エントロピーのどういう性質が効いているの?
交差エントロピーとシャノン情報量は似ているのはなぜ?解釈は?

PONTAPONTA

CNNは5×5を一層より3×3を二層にした方が、関数の形を複雑に出来るので性能が良い。

PONTAPONTA

Grad-CAM

CNNのモデルにおいてモデルの結果が画像のどの部分を見て判断したかをヒートマップで提示出来るようにする手法。謎。

PONTAPONTA

ResNet

CNNは単に20層以上並べても性能が上がらない。VGG19は19層並べたモデル。
誤差逆伝播法において逆伝搬が20層以上伝搬出来ないためと思われる。
途中で分岐してレイヤーを飛ばす処理を加えることで100層以上の学習を可能にしたのがResNet

層を飛ばすことで実質的にアンサンブル学習になっているのではないかという解釈もある。

PONTAPONTA

画像系有名データセットの解説記事。

https://cvml-expertguide.net/terms/dataset-terms-list/

PONTAPONTA

GAN LAB https://poloclub.github.io/ganlab/

GANの学習プロセスをプロセスを解説するサイト。

PONTAPONTA

本格的なJupyter on k8s環境の構築方法の解説記事。最後でサラッとJupyterのバグを見つけてpull request送ってるの凄すぎる。

https://somber-rice-9c9.notion.site/Kubeflow-Jupyter-Enterprise-Gateway-Jupyter-Notebook-036c3598046c410da6dfcc739d494085

同じ記事。cyberagentはk8sでオンプレ機械学習基盤作ってるのかな?

https://developers.cyberagent.co.jp/blog/archives/24537/

PONTAPONTA

こういう機械学習基盤で日本語LLMも学習したのかなぁ

機械学習基盤を自社で作れると強いよね。クラウドでも同じようなのを提供してるけど、新たなハードウェアが出た時にそれをクラウド事業者がリリースするのって遅いし、値下げも全然されないしでAIみたいな進展早い分野だとそこで開発競争負けるもんね。まあ、私がAWSでRDSを使うより早くオンプレにデータベースを構築できるオンプレスペシャリストも存在しないので、クラウドも使って開発速度上げることももちろん重要なんだけどね。結局、ITインフラを全てクラウドにお任せできるなんて幻想で、ハイブリッドできる企業が強いんだろうなぁ。分散投資は強い。当たり前の話か。

PONTAPONTA

Tensorflow のfloat16の記事

https://www.tensorflow.org/guide/mixed_precision

PONTAPONTA

Tensorflowを新しめのGPUやTPUで動かすと自動的にfloat16に変換するらしい。なのであんまり設定しなくても速いらしい。

この辺の最適化はpytorchだとどうなってるの?

PONTAPONTA

float16では変数が範囲から超える可能性があるから、model.fitでは自動で損失をスケールさせてから偏微分を計算するらしい。
カスタム学習ループを用いる場合でスケールさせたいなら特別な設定しなくちゃいけないらしい。

この辺もPytorchどうなってるの?みんなカスタムループ書いてるけど…
みんな細かく設定してるのかな

PONTAPONTA

TensorflowでModelを継承してtrain_stepを定義した場合どうなるんだろう…
この場合もcompileやfitでよしなにやってくれるのかな

PONTAPONTA

GPU のテンソルコアを使うためには引数を8の倍数にしろって書いてある。

PONTAPONTA

tf-idf (term frequency–inverse document frequency)

文章をone-hotベクトルにする際に、全ての単語を平等に1とするのではなく、重みをつけてベクトルにしたい。そんな時に使われる古くからある手法。

例えば、thisとかisとかaとかが含まれてる文って言われてもなんのことかさっぱりわからないけど、machineとかlearingとかが含まれた文って言ったら文の意味をざっくり取り出せる気がする。それを数値にしたもの。

具体的には以下を掛け合わせて計算する。

tf: 単語の出現頻度 (その単語の出現頻度)
idf: 単語が出現する文の数の逆数(単語が文に現れることの珍しさの指標)

PONTAPONTA

RNNの功績を説いた記事(の日本語訳)

https://qiita.com/KojiOhki/items/397f157342e0def06a9b

PONTAPONTA

GPUメモリの見積もり

1billion = 10億
32bit * 1 billion = 4GB
16bit * 1 billion = 2GB

dolly-v2-3b は3billionのモデルなので、float16にすれば6GB使う。(実際にはtokenizerもGPUで動いたりするので、倍の12GBぐらいないと動かないと思う。)

PONTAPONTA

学習時にはGPU上にモデル以外もたくさん乗るので、簡単には見積もれない。

Twitterとかブログとか調べた結果、ざっくり1億パラメータで1~2GBのGPUメモリを食うという印象。(幅が広いのはバッチサイズとか量子化してるかとかに依存するから)例えば、dolly-v2-3b を学習には3billion = 30億なので、30GB〜60GBのGPUメモリが必要。ご家庭の3090や4090では厳しいと思う。1~2billionのモデルは学習できそう。

PONTAPONTA

ざっくりまとめ

推論時: 1billion = 2~4GB
学習時: 1billion = 10~20GB

嘘の可能性あり。

PONTAPONTA

Transformerの最近の研究について

https://zenn.dev/zenkigen/articles/2023-01-shimizu

PONTAPONTA

Pre-LNとPost-LNの違いを詳細に検証した論文

https://arxiv.org/pdf/2002.04745.pdf

Post-LNだとwarm-upが必須で学習を進めるのが難しく。Pre-LNだとwarm-upは必須ではなく学習が簡単に進むらしい。これと同時期に出たGPT-2はPre-LNを使ってるらしい。

PONTAPONTA

transformerの学習手法についてまとめた論文

https://arxiv.org/abs/1804.00247

バッチサイズを上げると精度が上がるとか書いてある。

この原理はGPTにも成り立ってるらしくて、GPT3ではbatch_size=10^6とかで計算してるらしい。GPU富豪しかAI作れない時代。

PONTAPONTA

CLIP Contrastive Language-Image Pretraining

https://deepsquare.jp/2021/01/clip-openai/

画像とその説明文のペアを大量に用意する。
学習時には、画像のembeddingと説明文のembeddingの内積が大きくなるように学習する。
推論時には、入力画像といくつかの説明文の内積を計算して、最大の説明文を選択する。

こんな単純なアイデアはうまく行かなそうな気がする。さすがOpenAI、計算力の暴力って感じする。

PONTAPONTA

Bert系

RoBERTa, ALBERT, DeBERTa

PONTAPONTA

bertが出来ること

穴埋め問題。
文章の分類。
背景の文章を与えて、質問から答えの場所を探すタスク。
文章から固有名詞を探す。

PONTAPONTA

transformer.js

transformerのモデルがブラウザで動く。公式にReactと組み合わせて翻訳作るチュートリアルがある。
以下デモ、興味深い。

https://xenova.github.io/transformers.js/

PONTAPONTA

ブラウザでサイトにアクセスするたびに毎回300MBとかモデルをダウンロードできないから、ブラウザに機械学習モデルを呼び出す機能が追加されんだろうね。今のWeb Speech APIみたいに。
そうなったらおもろそう。

PONTAPONTA

こういう複数の領域を組み合わせた技術っておもろいよなぁ。ゲームをブラウザで動かす目的で作られたwasmとwebglを、機械学習の高速演算に応用して手元でAIが動くとか楽しすぎ。こういう組み合わせが自由にできることが、ソフトウェア界隈の爆発的な成長に繋がってるんだろうなぁ。

PONTAPONTA

Retentive Network

Transformerは学習の効率は良いが、推論は効率よくない。RNNは学習の効率は良くないが、推論は良い。2つのいいとこ取りをしたのもの?って思ってる。
ローカルLLM勢の救世主になるかも。

PONTAPONTA

Understanding deep learning requires rethinking generalization (2016)

https://arxiv.org/abs/1611.03530

DLって何で過学習しないの?って調査した論文。

PONTAPONTA

複素数でニューラルネットワーク
四元数でニューラルネットワーク

https://zenn.dev/lotz/articles/345f87c5fe0697

何に使うかは謎だけどおもろい。

PONTAPONTA

複素数を自動微分するためには二重数を2つ用意しなきゃいけないらしい。四元数は二重数を5個用意しなきゃいけないらしい。

PONTAPONTA

正確には複素関数をウィルティンガーの微分で自動微分するときは、二重数を2つ用意しなきゃいけないってことか。

普通の複素関数の微分だったら一個でいいのかな。

おもろいね。

PONTAPONTA

二つのfine tuningしたモデルを組み合わせて、新しいモデルを作る話。

https://zenn.dev/platina/articles/cdab4992bf39d2

こんな事ができるのか…

PONTAPONTA

モデルをfine tuningした時の差分は、足し算とか引き算に意味があるのか。word2vec的な感じかな。

なんか数理的にも面白い気がする。

PONTAPONTA

高次元球体の体積は表面に集中する話って機械学習でも現れるの?どういう文脈か気になる。

https://windfall.hatenablog.com/entry/2015/07/02/084623#:~:text=高次元空間においては,しているのだ!

PONTAPONTA

統計力学で、高次元球体の表面は体積とおんなじっていう近似をした記憶があるんだが、、、
ミクロカロニカル分布からカノニカル分布を導くときだっけか

それと関係あるのかな

PONTAPONTA

AI時代に言語学の存在意味はあるのか?認知文法の思考法

https://www.hiroshima-u.ac.jp/souka/028

言語学者から見たディープラーニングを語ってる

PONTAPONTA

言語学者はディープラーニング見てるけど、ディープラーニングやってる人は言語学あんまり見てない気がする。
どうなんだろ。見てる人もいるのかな。

PONTAPONTA

個人的には,AIであっても具体的な言語表現を大量に学習することを通して,多くのメタファーを習得することができるのではないかと考えますが,今後の研究成果を待ちたいところです。

もうその壁は超えたと思いますね…

PONTAPONTA

最後まで読んだ

https://www.hituzi.co.jp/hituzigusa/2021/07/30/cogai-12/

最終的にAI時代には言語を学ぶことの意味が変わると言う話をしている。語学教育ではコミュニケーション手段よりも自分と違う認知の人がいるということを教えるように変わると言ってる。
まあでもそれって語学じゃなくても学べるよね。物理勉強したら、量子状態は人間には認知できないことを学べるし、重力によって時空が歪んでるとかいう直感的には全く信じられない現象も学べるよ。言語で認知の違い学ぶのも一つの手だとは思うけど、認知の違いを学びたいなら普通に文化や歴史学んだほうが面白い気がするけどね

現代って、AIにどれだけ効率的に人間のやりたいことを認知させるかという感じなんだよなぁ。認知できることはすでに前提となっていて、それをどれだけ効率的に伝えるかという感じに変わった気がする。

PONTAPONTA

全体的に言語学者の危機感?みたいなのが伝わってくる面白い文章だった。これまで自然言語を理解できるのって人間しかいなかったわけだけど、それがついに人間以外で自然言語を理解できる者が現れたわけだよね。この現状は言語学者の視点からどう見えているのか、そのへんがもっとしりたい。

あと著者は、ニューラルネットワークが人間の脳を模倣しているから、AIは人間と同じ脳の動きで思考している?的な話をしている気がする。人間の脳はtransformerほど単純でもない気がするけどね。

あとあと、この辺の人間の認知に関する研究って、人が数学を理解するプロセスを研究してるのかな。あの数学特有の「何がわからないかわからない状態」から「何がわからなかったかわからない状態」に移り変わるプロセスとかって名前ついてたりするのかな。

PONTAPONTA

Efficient State Space Model

状態空間モデルをニューラルネットワークにしたものらしい。SSMsとか呼ばれている。
transformerの計算コストを抑える試みの一つとして近年注目され始めているらしい。

まだこれを用いた有名モデルは現れていないという理解。今後どうなるか。

PONTAPONTA
PONTAPONTA

4096 tokenに対応。

llama-1の2倍。長いコンティストのモデルでも短い文章に対して性能が落ちないみたい。

PONTAPONTA

Llama-2は

RoPE

を使っている。ReFormerってモデルから引用してるみたい。

オリジナルのtransformerはabstract sinusoid PE (訳?:絶対正弦波位置ベクトル化)を使っている。

PONTAPONTA

MultiHeadAttentionのMultiHeadの部分が変更されている。

MQA <- 基本的にこれ
GQA <- 34B 70Bのみ

MQAはMultiHeadのHeadを一つにしたもの。GQAはグループ化してHeadを共通化したもの。
Denseの計算は重いから共通化して改善してるんだと思う。

PONTAPONTA

非線形層も少し違う。

SwiGLU <- LLama-2
GeLU <- ちょっと古いLMはこれ

オリジナルのtransformerはReLUが使われている。

PONTAPONTA

Pre/RMS Norm <- LLama-2
Post/Layer Norm <- Original transformer

Normも違う。Postだと学習が難しいと聞いた。でかいモデルだからPreで学習してるんだと思う。

PONTAPONTA

モデル構造はだいたい理解した。

llama-2って「Attention is all you need」の右側のモデル構造とあまり変わらないことがわかった。transformerは初めから完全された形で生まれてきたっていう話は間違ってないんだなぁ。

どうやらモデルを工夫するよりデータとか学習のさせ方を工夫しているみたい。

PONTAPONTA

temperatureについて

temperatureはGPTの最後の層のsoftmaxで得られる確率分布のパラメータである。
temperatureを大きくすると確率分布がフラットになって、出力が多様になる。
temperatureを低くすると確率分布が鋭くなって、出力が一定になる。

GPTは、自己回帰モデルなので、前回の出力を次の入力として加える。そのため、最後のそうだけ切り替えるだけでもかなり出力が変わってくる。

物理やってた人はボルツマン分布とか正準分布とか思い出すと良い。