<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FP6</title><link>https://blog.ast.moe/tags/fp6/</link><description>Recent posts from 五里霧中</description><generator>Hugo</generator><item><title>小規模画像拡大DNNにおけるFP6量子化の評価: 条件探索と残差型・直接生成型の比較</title><link>https://blog.ast.moe/blog/2026-09-24-2/</link><pubDate>Thu, 24 Sep 2026 22:07:00 +0900</pubDate><guid>https://blog.ast.moe/blog/2026-09-24-2/</guid><description>&lt;h2 id="概要"&gt;概要&lt;/h2&gt;
&lt;p&gt;小さな画像拡大DNNを使い、FP16の重みをFP6へ変えたときの画質とファイル容量を比較した。量子化条件の探索では検証画像4枚のPSNRが上がったが、別画像4枚では下がった。その後、撮影系列を分けた174枚の5分割評価と、FP16の条件を固定するまで使わなかった12枚で評価した。同程度のパラメータ数でも、残差型と直接生成型では一律FP6への変換による劣化が大きく異なった。FP6の最終12枚比較はFP16結果を見た後に加えたため、新たな盲検評価ではない。&lt;/p&gt;
&lt;p&gt;この記事は、探索で得た改善が別画像にも残るか、また一律のFP6量子化でモデル間の劣化がどう違うかを検証した記録である。小さな画像拡大DNNの結果であり、LLMの精度やFP6専用演算器の速度を直接示すものではない。&lt;/p&gt;
&lt;h2 id="背景と問い"&gt;背景と問い&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blog.ast.moe/blog/2026-09-24/"&gt;前の記事&lt;/a&gt;では、FP6のE3M2とE2M3を眺めながら、限られたbitを重みのどこへ配るかを考えた。JPEGのように表現を変えたり、Zopfliのように量子化を作る段階で候補をたくさん試したりできないか、という話も書いた。ただ、その時点では自分でモデルを量子化して測った結果はなかった。&lt;/p&gt;
&lt;p&gt;そこで
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/quant-search-exp"&gt;
quant-search-exp
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
を作った。LLMをいきなり扱うのではなく、重みが数百個の画像拡大DNNから始める。実験結果と手順は
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/quant-search-exp/issues/9"&gt;
Issue #9の検証レポート
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
にも残している。&lt;/p&gt;
&lt;p&gt;調べたいのは二点ある。推論時のFP6形式を変えずに量子化条件だけを探索したとき、選択に使っていない画像でも画質は上がるのか。そして、パラメータ数をほぼ揃えた別のモデルでも、一律のFP6量子化による画質低下は同じ程度なのか。最初は探索的に測り、その結果を受けて画像の分け方とモデル比較を作り直した。&lt;/p&gt;
&lt;h2 id="実験方法"&gt;実験方法&lt;/h2&gt;
&lt;h3 id="小さな画像拡大モデル"&gt;小さな画像拡大モデル&lt;/h3&gt;
&lt;p&gt;最初に作ったのは、低解像度JPEGをbicubicで縦横2倍に拡大し、その結果を小さなDNNで補正するモデル。拡大後の3×3画素のRGB値、計27値を入力し、16ユニットのReLU隠れ層を経て、中央画素に加えるRGB補正3値を出す。全部で499パラメータしかない。一般的な超解像モデルと画質を競うためではなく、量子化条件を何度も変えて評価できる大きさにした。&lt;/p&gt;
&lt;p&gt;学習用の画像から最大512×512画素のcropを取り、半分に縮小して品質70のJPEGを作り、元のcropを正解として2倍拡大を学習する。評価でも同じように人工的な低解像度JPEGを作る。指標は、復元画像と元画像のRGB画素から計算したPSNRで、高いほど元画像に近い。出力JPEGとして保存するときの再圧縮誤差は含めない。&lt;/p&gt;
&lt;p&gt;モデルの重みをFP16で保存したファイルは1,006 byte。FP6版は接続重み480個を32個ずつのblockに分け、各blockにE8M0の共有scaleを付ける。bias 19個はFP16のままで、ファイル全体は431 byteになった。つまり「全499パラメータを6bitにした」という話ではない。どちらも計算時にはFP32を使うので、この実験からFP6専用演算の速度向上も主張できない。&lt;/p&gt;
&lt;h3 id="探索的な量子化条件の比較"&gt;探索的な量子化条件の比較&lt;/h3&gt;
&lt;p&gt;まず、FP6 E2M3という推論時の形式を固定し、量子化するときのscale、clipping、丸め方だけを変えてみた。15個のblockについて標準設定以外の26候補ずつ、合計390候補を検証画像4枚のPSNRで順に比較する。よい候補が見つかったblockだけ採用する方式で、全組み合わせの総当たりではない。モデルのファイルサイズと推論器は変わらない。&lt;/p&gt;
&lt;p&gt;この時点では検証4枚と別画像4枚で比べた。ただし、別画像4枚は390候補の選択には使っていないものの、それ以前の学習条件の検討で参照済みだった。盲検の最終評価ではなく、探索的な比較として扱う。&lt;/p&gt;
&lt;h3 id="学習画像数の予備比較"&gt;学習画像数の予備比較&lt;/h3&gt;
&lt;p&gt;次に、元の学習画像18枚に131枚を追加し、学習を8、32、64 epochに延ばして比べた。モデルは同じ499パラメータで、seedを3通りにした。各epochで抽出する画素数は画像18枚でも149枚でも同じ20万画素にしている。&lt;/p&gt;
&lt;h3 id="撮影系列を分けた追試"&gt;撮影系列を分けた追試&lt;/h3&gt;
&lt;p&gt;その後、追加画像を148枚に増やし、既存26枚と合わせた174枚を撮影月や近いカメラの連番で26組にまとめた。同じ組が学習側と評価側へまたがらないように5分割し、seed 42と43で比較する。以前使った評価4枚もこの174枚の中に含め、各分割では学習側か評価側のどちらかに置く。&lt;/p&gt;
&lt;p&gt;モデルは二種類にした。一つは先ほどの&lt;strong&gt;残差型&lt;/strong&gt;で、bicubicで拡大した画像をDNNが補正する。もう一つは&lt;strong&gt;直接生成型&lt;/strong&gt;で、低解像度画像の3×3近傍から高解像度の2×2画素を直接出す。後者は推論時にbicubic画像を使わない。比較するパラメータ数を約500個と約650個の二組に揃え、どちらも隠れ層は1層。24 epoch、JPEG品質70、学習率0.0003とし、1 epochあたりの教師画素数80万と更新回数も揃えた。ただし入出力の仕事そのものは異なるので、完全に同一の学習問題ではない。追試にはモデルの種類と幅を記録する別のファイル形式を使ったため、同じ499パラメータの残差型でも、最初のモデルとはファイル容量が少し異なる。&lt;/p&gt;
&lt;p&gt;別に確保した12枚は、条件を固定するまで学習にも交差検証にも使わず、174枚すべてで再学習したモデルを最後に評価した。画像の完全一致と近いdHashは検出されなかったが、同じような撮影場面まで否定できるわけではない。&lt;/p&gt;
&lt;p&gt;FP16モデルの保存済み重みから、接続重みだけを一律MXFP6 E2M3またはE3M2へ変換した。32重みごとにE8M0 scaleを使い、biasはFP16のまま。ここではblockごとの形式選択や390候補の探索は行っていない。FP6モデルも読み込み時にFP32へ展開してから計算する。&lt;/p&gt;
&lt;h2 id="結果"&gt;結果&lt;/h2&gt;
&lt;h3 id="量子化条件の探索"&gt;量子化条件の探索&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;モデル&lt;/th&gt;
&lt;th style="text-align: right"&gt;検証4枚&lt;/th&gt;
&lt;th style="text-align: right"&gt;別画像4枚&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FP16&lt;/td&gt;
&lt;td style="text-align: right"&gt;34.447 dB&lt;/td&gt;
&lt;td style="text-align: right"&gt;31.382 dB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;一律FP6 E2M3&lt;/td&gt;
&lt;td style="text-align: right"&gt;34.437 dB&lt;/td&gt;
&lt;td style="text-align: right"&gt;31.379 dB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E2M3の量子化条件を探索&lt;/td&gt;
&lt;td style="text-align: right"&gt;34.468 dB&lt;/td&gt;
&lt;td style="text-align: right"&gt;31.361 dB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;検証側では一律E2M3から &lt;strong&gt;+0.031 dB&lt;/strong&gt;。しかし別画像では &lt;strong&gt;-0.018 dB&lt;/strong&gt; だった。作成時に計算を増やせば選択に使った画像へは合わせられるが、それだけで別画像にもよくなるわけではない。数値と試行記録は
&lt;span&gt;
&lt;a target="_blank" href="https://github.com/ieee0824/quant-search-exp/blob/master/results/fp6_e2m3_search.json"&gt;
探索結果JSON
&lt;/a&gt;
&lt;img class="external-link-icon" src="https://blog.ast.moe/images/outer-link.png" width="12" height="12" alt="" aria-hidden="true" loading="lazy"&gt;
&lt;/span&gt;
にある。&lt;/p&gt;
&lt;h3 id="学習画像数の予備比較-1"&gt;学習画像数の予備比較&lt;/h3&gt;
&lt;p&gt;3 seed平均の旧評価4枚では、18枚で8 epochのFP16が31.308 dB、64 epochでは31.438 dB。一方、149枚で64 epochは31.401 dBだった。追加画像を使った32 epochでは検証4枚の値がよくなったが、旧評価4枚では18枚のみの同条件を下回った。少なくともこの条件では「画像を増やせば改善する」とは言えない。&lt;/p&gt;</description></item></channel></rss>