Half Float Library作りました

機械学習で使う用にhalf float(16-bit float)の演算ライブラリ作りました。と言ってもfloat型がIEEE 754の形式であることを仮定して、符号bitと指数部、小数部をそのままとってきてuint16_tに変換する、みたいな感じのお手軽実装ですが。

このライブラリの必要性

コンピューター将棋の評価関数の機械学習では、KPPT型の評価関数が主流で、その配列の大きさが1GB(次元数で言うと5億次元)程度になっています。今後、評価関数の次元数を増やそうと思ったときに、省メモリ化がどうしても必須になるので、half floatで計算してくれるライブラリを製作しました。

世の中にはすでにhalf floatのライブラリはいくつかあるのですが、わかりやすくシンプルに実装してあって、お手軽に使えそうなものがなかったので自作しました。

注意点

ちなみにソースコード中に出てくるs16,s32はそれぞれint16_t,int32_tの意味です。typedefなどで置き換えて使ってください。

ソースコードは非常にシンプルに書いてあるので読みやすいと思います。適宜、改造して使ってみてください。

ライセンス

MIT Licenseで配布します。

ソースコード

 

 


Half Float Library作りました” への5件のコメント

  1. 言われてサクッと作っちゃう当たりさすがです。
    今後のCPUにサポートされていくといわれていますが、言語側はまだまだですね。
    AIにもつかうそうなので、屋根さんの未来も安泰でしょうか??

  2. 非正規化数がらみの変換で値がおかしくなるとか、絶対値の大きすぎる値が無限大にならない (指数部が飽和しない) とか、float16の無限大・NaNが実数に変換されるとか、色々ありますが……

    • まあ、機械学習で使う場合、値が範囲内に収まっていることは使う側で守るので、問題にはならないかと。assertぐらいは書いてあったほうが良いかもですが。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です