テンソル とは
データを表現するためのデータを表現するための数学的な構造。
テンソルは、スカラー(単一の数値)、ベクトル(一次元配列)、行列(二次元配列)を一般化したもので、多次元配列を表現できる。
定義と具体例
-
0次元テンソル
- 単一の数値。いわゆるスカラー
例:5とか30とか
- 単一の数値。いわゆるスカラー
-
1次元テンソル
- 一次元配列。つまりベクトル
例:[1, 2, 3]とか
- 一次元配列。つまりベクトル
-
2次元テンソル
- 二次元配列。つまり行列
例:[[1, 2],
[3, 4]]
- 二次元配列。つまり行列
-
高次元テンソル(3次元以上):
- 三次元以上の配列。
例: [[[1, 2], [3, 4]],
[[5, 6], [7, 8]]]
- 三次元以上の配列。
と、どんどん次元が増えていく......
テンソルで表現されたデータ
1. 画像データのテンソル表現
画像データは通常、ピクセル値を格納する多次元テンソルとして表現される。
画像の各ピクセルは、明るさや色の情報を持っている。
-
グレースケール画像
グレースケール画像は、各ピクセルが0から255までの強度を持つ単一の値で表現される。これは2次元テンソルで表される。
例: 28x28ピクセルのグレースケール画像。このテンソルの形状は (高さ, 幅) 。
[
[0, 25, 50, ..., 200],
[30, 60, 90, ..., 210],
...
]
-
RGBカラー画像
カラー画像は、各ピクセルが複数のチャネルを持つ多次元テンソルで表される。通常、RGB(赤、緑、青)の3つのチャネルがある。
例:28x28ピクセルのカラー画像。幅×高さ×3のテンソル
このテンソルの形状は (高さ, 幅, チャネル数) 。例では (28, 28, 3)。
[
[[255, 0, 0], [128, 128, 128], [0, 255, 0], ..., [255, 255, 0]], # 最初の行
[[0, 0, 255], [64, 64, 64], [255, 0, 255], ..., [0, 255, 255]], # 2行目
...
]
2. テキストデータのテンソル表現
テキストデータは、単語や文字を数値やベクトルに変換し、それをテンソルとして処理することが多い。言語モデルで出てくるパラメータ数とテンソルは全然別物なので注意。
-
ワンホットエンコーディング
各単語を語彙(ボキャブラリー)内のインデックスにマッピングし、ワンホットベクトルに変換する。
例: 「猫はかわいい」という文を ["猫", "は", "かわいい"] とし、語彙サイズが10の場合。このテンソルの形状は (単語数, 語彙サイズ)
[
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], # "猫"
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0], # "は"
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0] # "かわいい"
]
-
単語埋め込み(ワードエンベディング)
各単語を固定次元のベクトルにマッピングする方法。埋め込み層を通じて、各単語は意味的に類似した単語と近くなるように配置される。
例: 「猫はかわいい」という文を3次元の埋め込みベクトルで表現。このテンソルの形状は (単語数, 埋め込み次元数) 。
[
[0.1, 0.2, 0.3], # "猫"
[0.4, 0.5, 0.6], # "は"
[0.7, 0.8, 0.9] # "かわいい"
]
-
シーケンスデータとしての表現
RNNやTransformerなどのモデルで使用するために、テキストはシーケンスデータとして表現されます。各単語やトークンはインデックスで表され、それがバッチとしてテンソルに格納されます。
例: バッチ内の2つの文、「猫はかわいい」と「犬もかわいい」をインデックスで表現。このテンソルの形状は (バッチサイズ, シーケンス長) 。
[
[1, 2, 3, 0], # "猫はかわいい" (0はパディング)
[4, 5, 3, 0] # "犬もかわいい"
]
3. 音声データのテンソル表現
音声データはテンソルとして、次のような形で表現される。
-
時系列データとしての音声データ
音声データは基本的に時系列データ。音声信号は、時間の関数として変化する連続的な振幅の変化を記録したもの。これをデジタル形式で扱うために、サンプリングレート(通常は1秒間にサンプリングする回数)で離散的なデータに変換する。 -
1次元テンソルとしての表現
最も単純な形式では、音声データは1次元のテンソル(ベクトル)として表現される。例えば、1秒間の音声を16kHzのサンプリングレートで記録した場合、その1秒間の音声は16,000個のサンプル値として表現される。
例:1秒間の音声信号を16kHzでサンプリングした場合
[0.1, 0.3, -0.2, 0.4, ..., -0.1] # 長さ16,000の1次元テンソル
-
短時間フーリエ変換(STFT)による2次元テンソルとしての表現
音声データを周波数領域で分析するために、短時間フーリエ変換(STFT)を適用する。これによって時間-周波数平面にマッピングされる2次元テンソルが得られる(スペクトログラム)。
例: このテンソルの形状は (時間窓数, 周波数ビン数)
[
[1.2, 0.5, 0.1, ...], # 時間t1における各周波数の強度
[0.9, 0.4, 0.3, ...], # 時間t2における各周波数の強度
...
]
-
メルスペクトログラムとしての表現
人間の聴覚の特性に基づいて、周波数ビンをメル尺度に変換したメルスペクトログラムもよく使用される。これも2次元テンソル。
例: このテンソルの形状も (メル周波数ビン数, 時間窓数) 。
[
[0.8, 0.6, 0.3, ...], # メル周波数ビン1における各時間窓の強度
[0.7, 0.5, 0.4, ...], # メル周波数ビン2における各時間窓の強度
...
]
-
マルチチャネル音声データとしての表現
ステレオ録音や複数のマイクを使用する場合、各チャネルごとにテンソルが存在し、それらをまとめて表現することもある。これにより、3次元テンソルが得られる。
例: ステレオ音声データを16kHzでサンプリングした場合
このテンソルの形状は (チャネル数, サンプル数) 。
[
[0.1, 0.3, -0.2, ..., -0.1], # 左チャネルの1次元テンソル
[0.2, 0.4, -0.1, ..., 0.0] # 右チャネルの1次元テンソル
]
まとめ
テンソルは構造の名前。
データをテンソルとして表現する方法は複数ある。
これらを使い分けて、さまざまなタスクを効果的に処理しよう💪