ルックアップテーブル
自明なハッシュ関数 (trivial hash function) を利用する方法(インデックスマッピング)では、データを符号なしの値としてそのまま一次元配列のインデックスに使用する。値の範囲が小さければ、これが最も高速なルックアップ方法となる。
ここでLUT関数が組み込まれたネットワーク o ^ = f ( L U T ( i ) ) {\displaystyle {\widehat {\boldsymbol {o}}}=f(LUT({\boldsymbol {i}}))} を考えると、LUT行列 W {\displaystyle W} を変化させれば o ^ {\displaystyle {\widehat {\boldsymbol {o}}}} が変化する。よって学習データ ( i , o ) {\displaystyle ({\boldsymbol {i}},{\boldsymbol {o}})} を用いて o ^ {\displaystyle {\widehat {\boldsymbol {o}}}} を o {\displaystyle {\boldsymbol {o}}} に近づけるようネットワークのパラメータを更新する(学習する)と、パラメータの一部である W {\displaystyle W} も更新される。これはすなわちLUTを学習させることに相当する。結果としてLUTはそのタスクとネットワークに適した表現を得る。
ニューラルネットワークの分野ではLUTを Embedding(埋め込み)と呼び、誤差逆伝播法を用いてLUTを含むネットワークの学習をおこなう。
画像処理などデータ解析系の処理において、ルックアップテーブル(LUT)は入力データを処理に適した形に変換するのに使われる。例えば、グレイスケールの土星の映像をカラー画像へ変換し、土星の輪のそれぞれを強調するといった処理が行われる。
ルックアップテーブルを使用した計算量削減の代名詞として、正弦などの三角関数の計算が挙げられる。三角関数の計算のために処理が遅くなっている場合は、例えば正弦の値を1度ずつ360度すべてに対して予め計算しておくことで、処理の高速化を図ることができる(この際、コンパイル時に静的変数としてテーブルを定義しておけば、実行時に毎回計算を行うコストも省くことができる)。
プログラム中で正弦の値を使う際には、最も近い正弦の値をメモリから取得する。この際、求める値がテーブルにない場合は、公式を用いて求め直すこともできるが、テーブル中の最も近い値をもとに内挿することもできる。このようなルックアップテーブルは数値演算コプロセッサの内部でも使用されている。例えば、Intelの悪名高い浮動小数点除算バグはルックアップテーブルの誤りが原因であった。
変数が1つしかない関数(例えば正弦や余弦)は単純な一次元配列として実装できるが、複数の変数を持つ関数の場合は多次元配列を使用する必要がある。