上の出張版の元コンテンツであるGitHub Pagesは以下。 こちらは今後も更新されている予定です。
RDBの趣味開発に一緒に取り組んでいただける方に求む要件等
(https://mobile.twitter.com/ryo_grid/status/1461110789570396162
に貼るために書いた記事です)
140文字だと納まらないので、ブログエントリの形で記述させてもらいます。
お願いする立場にもかかわらず条件をつけてしまい、厚かましいかとも思いますがご理解をお願いいたします。
少し遠回りになりますが、まず、やろうとしていることについて改めて説明させて頂きます。
実装で目指すレベル
- いわゆる車輪の再発明というやつで、特別に新規性のあるものを作ろうという話ではありません
- あまり凝ったものを作るつもりはひとまずありません。教科書的なオーソドックスな実装で良いと考えています
- ただし、一般的にRDBの構成要素として挙げられるところは一通り実装したいと思っています
- 下図のCluster Communication、Remote Execution以外のところ

一緒に進めてくれる方を求めている理由
- 一人でやるより何人かで取り組んだ方がモチベーションをキープできそうだから
- 従って、求む方に関して開発にどれだけ貢献できるか、といったところは重要視していません
- 時間がとれなければ活動が出来なくても仕方ないですし、飽きたので抜けるといった判断も尊重します
- 極論、私がどこまで継続できるか、コミットできるか、も分かりません
- 開発は専用のSlackを用意して、そこでコミュニケートしながら進められればと考えています
あなたに求む要件(条件)
- 私と直接の面識があるか、ネット上でいくらかやりとりをしたことがあること
- コミュニケーションをとりながら進めていくことを考えた場合に、ほとんど存じ上げない方の場合、うまくやっていけない懸念が生じるため
- 職業プログラマであるか、それに近い程度のプライベートでのソフトウェア開発経験があること
- 「自分もRDBを書いてみたい!」というパッションを持っていること
- ペースはさておき、一緒に学んでいきたいという姿勢であること
上記をご確認の上、一緒にやってもいいという方がいらっしゃれば、TwitterのDMにてご連絡をいただければと思います!
要件のところについて判断の上(あくまで私の主観での判断になることはご理解ください)、返信させていだきます!
よろしくお願いします!
RESTで叩けるChordな分散KVS(Rust製)が動くところまで出来た!
RESTで叩けるChordな分散KVS(Rust製)が動くところまで来た!
長い道のりだった(感涙
- 一応ノードダウンにも耐えるように作ってある
- まだ、改善は必要
- データはレプリケーションしているので、ある程度はノードがダウンしてもロストしない
- データの整合性がどの程度守れるかはランニングテストでもして確認してみる予定
- 整合性が極力守られるような考慮は、まだあまり実装できていないが・・・
- ノードダウンやノード参加も適宜行いつつやってみる
Rustなので? Windows、Mac、Linuxとプラットフォームは選ばないし、ブラウザから叩けるようにもしてあります。
興味があれば Let's build and run !
PythonでマルチスレッドなプログラムをRust化する中での学び(現時点)
Pythonで書いた共有データを参照・更新する類のマルチスレッドなプログラムをRustにポーティングしていますが、現時点での学びは下の画像の通りです。
ReentrantMutex型はparking_lotというクレートが提供しているものです。
以上。
ImageMagickのコマンドラインツールで画像がモノクロかどうかを判定する(on Windows)
確実に判別できるのかまでは分かりませんが、下に記述する方法でおおむね判定できるようです。
以下のブログ記事を参考にさせてもらいました。
感謝です。
takuya-1st.hatenablog.jp
まず、
imagemagick.org
で、Windows向けの最新のバイナリをダウンロードしてきてインストールする。
インストールする際は、convertなどのレガシーなツールをインストールするか?という項目があるのでチェックする。
ffmpegをインストールするか?というオプションも必要そうなのでチェック(いらないかも)。
あとは、コマンドプロンプトを起動して以下のようにコマンドを実行。
>convert ファイルパス -colorspace HSB -separate -delete 0 -fx "u*v" -blur 2x2 -threshold 30% -format %[fx:mean] info: 0
モノクロだと0が出力され、そうでない場合は何も出力されません。
(参考にさせてもらったブログ記事とは挙動が異なるようですが、LinuxとWindowsでプラットフォームが違いますし、利用しているImageMagicのバージョンも違うので、そういうこともあるのでしょう。何故かまでは検証していません)
なお、jpeg画像でしか確認していないため、他の画像形式でうまくいくかは分かりませんが、多分うまくいくんじゃないでしょうか。
以上。
ツイートがバズった時の統計データを晒してみる(荒ぶるパン生地)
恥ずかしながら、以下のようなツイートを何の気なしに投稿したら、1.5万リツイート、8.5万いいねとかまでバズってしまったのですが、
生地はどうなったかなーと思ってみにいったら、うわああああああ pic.twitter.com/aFrEpO67yU
— KillerHamster2号@grid殺法免許皆伝※元ryo_grid (@KillerHamster_2) 2020年5月9日
ツイートがバズった時の統計データ(Twitterのページで見られるやつ)って、あまり見かけたことないな、と思ったので、何かの役に立つ人もいるかもなので晒してみます。
なお、どれぐらいリツイートされるとバズったと言うのか基準は良く分からないですが、とりあえず、ねとらぼさんには取り上げてもらったので、バズったと言ってもいいのではないかと思っています。
以上です!
ディープラーニングは、ほんま職人芸やなーという話
深層強化学習なエージェントによるFXシステムトレードのシミュレーション、というやつ、学習データでちゃんとしたパフォーマンスが出せるところまでは到達して(LSTM導入版でも)、今は、本来の目的を成すために汎化性能を上げるフェーズに移っているが、
— ninja_grid@grid殺法免許皆伝※元ryo_grid (@ninja_grid) 2020年3月20日
(続https://t.co/imK4tyaUQJ
(このTweetのスレッドをご参照下さい)
深層強化学習なエージェントでFXシストレのシミュレーションというやつの現状報告(2020/03/14)
以下のTweetからはじまるスレッドを参照ください。
深層強化学習なエージェントでFXシストレのシミュレーションというやつだが、現状報告をしておくと、まずここまでは到達した。https://t.co/iuBEcxSwvI
— ninja_grid@grid殺法免許皆伝※元ryo_grid (@ninja_grid) 2020年3月13日
(続
【Need Help!】Keras(TensorFlowバックエンド)でのマルチコア・マルチプロセッサ並列化、GPU並列化はどんな実装になっているのだろう?
Keras(TensorFlowバックエンド)でのマルチコア・マルチプロセッサ、GPU(単体)での並列化によるアクセラレーションについてです。
モデルのサイズによっては効果が無い、どころか遅くなる場合もあるというのは経験がある(Google Corabolatoryにて)のですが、では、どのパラメータをどのように変えることで大体同じ結果を、より速く得る(= アクセラレーションの恩恵を受けられるモデルのサイズにしつつ、イテレーションは減らす)ことができるのか、を考えたいのですが、そのためには内部動作を知らないとどうにもならない、と考えています。
個人的には、以下のような実装になってるのではないか、と推測しているのですがどうなんでしょう?
(調べてはみたのですが、TF内の概念レベルのアーキテクチャなんかは公式にあったものの、具体的にどうやってるねんというのは見つけられず・・・。探し方が悪いのかもしれないですが・・・)
考えている範囲は、fit関数を呼び出して終わるまでの処理です。
基本的にはミニバッチの単位で並列処理しているのだと推測。
ただ、1ミニバッチずつ渡すのは効率が悪いので、ミニバッチ群のデータ自体は並列処理する主体にそれぞれ担当分を最初にどかっと渡しておくのではないかと。
■CPU内のコアもしくは、マルチプロセッサを活用するためのプロセス並列
マスタとワーカがいて、ワーカは担当するミニバッチの勾配の計算が終わったら、その勾配の情報をマスタに送って、マスタはNNの重みを更新して、更新したあとのNNの重みデータをワーカに送って、以降その繰り返し。
通信はプロセス間通信をしているのか、プロセス間で共有メモリを作ってよろしくやってたりするのか不明。
■GPU 1枚を使った並列化
最初にCPU上のプロセスが、GPUメモリ上に重みデータを展開およびGPU上での実行プログラムを転送。
その後は、GPU上で各ワーカ的な何かが担当するミニバッチ群を処理していく。
1ミニバッチが終わったら、GPUメモリ上に置いてあるデータのロックをとって更新して、次のミニバッチの計算に進む。
一度必要なデータをGPUに転送したら、一回のfitを処理している最中はCPUとのやりとりは基本的に不要。
渡されたミニバッチ群を、指定されたepochだけ処理したら、GPU上のマスタプロセス的存在は、CPU上のプロセスに終了を通知し、CPU上のプロセスがGPU上のメモリを主記憶にコピー(CUDAの使い方の記憶は曖昧なので、最後に結果を得るあたりの記述は特に自信ありません)。
などと考えましたが、ナイーブな(深層学習の)並列化アルゴリズムを前提とすると、このような実装をした場合、どれかのワーカがNNの重みデータを更新した場合、古い重みデータを使って計算しているワーカの計算中の結果って破棄しないとダメ、つまりバッチ単位で並行に実行するって実装はNGなんですな。
ミニバッチの中のサンプル単位(単純には、ミニバッチに含まれるサンプルをワーカごとに均等に分けて割り振る)で並列化しないとダメ・・・?
もしくは↓のリンク先のように、並列化を想定したNNの重み更新アルゴリズムを用いるか。
togetter.com
しかし、それだと並列化することによって結果が変わっちゃったりするそうなんですよね。
普通にfit呼び出して、KerasだとGPUが載ってると自動的に使ってくれますが、それで、CPUだけで計算した場合と結果が変わってしまったら問題ですし、これはないですかね。
良い情報ソースをご存じの方がいれば教えていただければ幸いです ●刀乙
ちなみに、私が今いじっている以下のプログラムをfit_generatorを使って、マルチコア並列(8コア)させてみた時は、少し速くなったかな?程度でした。
ただ、ミニバッチのサイズが8(コア数に合わせたわけではなく元からこの値でした)と小さ過ぎたためで、ミニバッチのサイズをせめて64程度まで大きくすれば違ったのかも。
qiita.com
深層学習は特徴量を勝手に学習してくれると言われて出てきたけれどRBM・DBNやAuto Encoderとか皆使ってる?
追記:
有識者の知人曰く、正則化処理、オプティマイザ、活性化関数などの開発が進んだおかげで、この手のものを使わなくても多層化が可能となって、あまり使われることが無くなったのだろう、とのことでした。
ディープラーニングブームが起きてからも、結構変化があったんですねー。
(ここから最初の記事)
自分が深層学習ってなんぞやって思って、最初に調べた時にRBMだとか調べたなーと思って、下の記事をふと読んでいたんですが(これはちょうど深層学習にパンビーでも手を出し始めるるようになった頃の記事ですかね)、
RBMや、その派生系、オートエンコーダとかって、私は使ったことがない(オートエンコーダは、これで画像圧縮できるんじゃね!とか言って少し触ったことはありますが)し、NNの最上段に学習済みのものを置くのが当たり前ってなプラクティスもないような気がするんですが、知らないだけで、ガチKagglerとかガチのモデル作ってる人とかは使ってるもんなんですかねー(タスクの都合上、NN内部に組み込む必要があるものは除く)。
有識者の方のコメントお待ちしております ●刀乙
【メモ】どうやって過学習を防ぐか、汎化性能を上げるか、勾配爆発・消失を防ぐか
・自分で検索する時のタグ的なもの
深層学習、ディープラーニング、機械学習
勾配爆発、勾配発散、勾配消失、汎化性能
個人的なリンク集のようなものです。
実装はKetasのSequencialモデルベースを基本的には想定
・基本
TensorFlow公式の解説
"過学習と学習不足について知る"
過学習と学習不足について知る | TensorFlow Core
・weight decay (正則化)
[DL]weight decayって何? - Qiita
How to Use Weight Decay to Reduce Overfitting of Neural Network in Keras
・勾配クリッピング(これは過学習の抑制につながるのかは現状理解してない)
DNNの基礎知識についてのまとめ - Deep Learning 脱初心者めざして
↑ベージ全体もキーワードを拾う感じで、目を通しておきたい
How to Avoid Exploding Gradients With Gradient Clipping
・以下はLSTMの話
How to use Dropout and BatchNormalization in LSTM Networks (Keras) - Stack Overflow
python - Where do I call the BatchNormalization function in Keras? - Stack Overflow
LSTMだと、LSTMレイヤの中でのdropoutを指定するキーワード引数がある。
あと、BatchNormalizationはLSTMに限らないが、Denseなどの場合は、Activaion関数のレイヤを分けて、その間に入れるのが正しい?
BatchNormalizationをモデルに組み込む - Qiita
・勾配爆発・消失
勾配消失問題と勾配爆発問題~原因と解決策~ | マサムネの部屋
・その他参考
BatchNormalizationの解説と、Dropoutなども併せて考えた時にどう使うとよさそうか
Deep LearningにおけるBatch Normalizationの理解メモと、実際にその効果を見てみる - Qiita
過学習抑制「Weight Decay」はSGDと相性が良く、Adamと良くない?/Neural Network Consoleの使い方 - "BOKU"のITな日常
誰でもわかるニューラルネットワーク:正則化をテンソルフロープレイグラウンドで試してみた - Qiita
Batch Normalization:ニューラルネットワークの学習を加速させる汎用的で強力な手法 - DeepAge
各種正則化から転移学習まで。tensorflowソースコードで見るDL性能改善手法 まとめ(ver 2) - Qiita
今更聞けないディープラーニングの話【ユニット・層・正則化・ドロップアウト】 - HELLO CYBERNETICS