ICAと現実のカクテルパーティの問題

ICAと現実のカクテルパーティーのジレンマ

独立成分分析がその典型的な思考実験に失敗する理由と、この失敗から学ぶべきこと。

著者によるカクテルパーティのメタファー(画像)

独立成分分析(ICA)は、1990年代以降の重要な開発を経て、一般的に使用されるデータの分解と前処理の技術となっています。ICAは、情報のない分離(BSS)のための手法であり、いくつかの独立したソースが盲目的に混合され、その結果の混合信号がいくつかの他の観察者によって受信されます。ICAのアプローチは、混合された信号を分離し、デミックスされた成分やそれらの成分上に射影されたデータの「非ガウス性」を最小化する基底の変換を求めることによって、独立したソースを見つけ出そうとします。

ICAとその応用については既にたくさんのチュートリアルが存在しています:この記事はICAの入門ではありません。代わりに、ICAの説明とともにほぼ常に現れるモチベーションの問題についての解説です。

おそらく、ICAのイントロダクションでは、カクテルパーティの問題をBSSの解決策として示す例として使用されます。²カクテルパーティの問題は、ICAの紹介に使用される効果的かつモチベーションを喚起する思考実験です。ただひとつの問題があるだけです:ICAは実際のカクテルパーティでは劇的に失敗します。そして、ICAがどのように適用されるべきかを実際に教えてくれるはずです。

ICAとカクテルパーティ

混雑した部屋。パーティー参加者たちが会話を交わしながら、手にはカクテルを持っています。リスナーは、混ざった雑談を別の声に分離し、一人のスピーカーに集中する方法を見つけることができるでしょうか?これがカクテルパーティの問題の設定であり、ICAを紹介するために使用される典型的な例です。さまざまな場所に配置されたいくつかのマイクロフォンがあると想像してください。ICAは、録音された信号を、パーティーの異なるスピーカーを表す独立した成分にデミックスする方法を私たちに明らかにするのだと言われています。

BSS問題は、いくつかの独立したソースyが観測された信号xに混ざり合うようなミキシングの問題として定式化されます。

この記事に含まれる数式は、アインシュタインの総和記法を使用しています。

Scikit-learnの分解モジュールには、FastICAの充実した実装が含まれており、低次元の例でこれがどのように機能するかを示すのに使用することができます。いくつかのただ位相シフトした正弦波(異なる周波数で振動する)の独立したソースを設定し、それらをランダムに混ぜ合わせた後、FastICAを適用してそれらをデミックスしようとします。私たちが見るのは、スケーリング、符号、および順列によってほぼ回復された元のソース信号(そしてしたがって、マイクロフォンの位置を知っている物理的な問題では、スピーカーの方向/位置を復元できる可能性がある)を行いました。

import numpy as npfrom sklearn.decomposition import FastICAimport matplotlib.pyplot as pltrng = np.random.default_rng(8675309)t = np.linspace(0, 10, 10000)x = np.array([    np.sin(2 * np.pi * t),     np.sin(2 * np.pi / 2 * t + 1),     np.sin(2 * np.pi / 2 * 2 * t + 2)])mixing = rng.uniform(-1, 1, [3, 3])# ランダムに生成されたミキシング行列が逆行列可能であることを確認するassert np.linalg.matrix_rank(mixing) == 3demixing_true = np.linalg.inv(mixing)y = np.matmul(mixing, x)fica = FastICA(3)z = fica.fit_transform(np.transpose(y))z = np.transpose(z)z /= np.reshape(np.max(z, 1), (3, 1))fig, ax = plt.subplots(3, 1, figsize = (8, 5))for ii in range(3):    ax[0].plot(t, x[ii])    ax[1].plot(t, y[ii])    ax[2].plot(t, z[ii])ax[0].set_title("Independent Sources")ax[1].set_title("Randomly, Linearly, Instaneously Mixed Signals")ax[2].set_title("ICA Components (Match up to Sign and Linear Scaling)")plt.tight_layout()
瞬時的な混合信号のためのFastICA

カクテルパーティモデルのいくつかの仮定を列挙しましょう:

  • カクテルパーティの部屋では、観測者(たとえばマイク)の方がソース(たとえばスピーカー)よりも多いと仮定しています。これは問題が過剰確定されていないことの必要条件です。
  • ソースは独立であり、正規分布ではありません。
  • Aは定数行列であり、混合は瞬時的かつ変化しません。

BSS問題は「ブラインド」ですので、ソースyおよび混合Aは不明であり、私たちはAの一般化逆行列であるデミキシング行列Wを求めます。ICAアルゴリズムはWを導出するための戦略です。

ミックスの準備ができています(著者の画像)

リアルなカクテルパーティ

実際にパーティでマイクアレイをセットアップし、録音された音声に対してICAを実行しようとすると、おそらくスピーカーを分離することにおいてICAはほとんど失敗するでしょう!

私たちのモデルの仮定のうち、特に瞬時的な混合を再考しましょう。音波の有限の速度により、スピーカーの位置で起こった音が部屋の各マイクロフォンに異なる時間遅れで到着します。

音の速度はパーティではおよそ343 m/sなので、スピーカーから10 m離れたマイクロフォンでは約0.03秒の遅れが記録されます。これはパーティの人間にとってほぼ瞬時的に思えるかもしれませんが、10 kHzの録音に対してはこれが数百のデジタルサンプルの遅延に相当します。

この時間遅延したスピーカーのブラインドミックスをバニラのICAに送信してみると、結果はうまくいきません。しかし、ICAを使ってオーディオをデミックスする例はありませんか?³ ありますが、これらのおもちゃの問題はデジタル的に瞬時に混合され、したがってICAのモデルの仮定と一致しています。現実の録音は時間遅延だけでなく、より複雑な時間変換の影響を受けます(以下で詳しく説明します)。

以上のおもちゃの例を再び思い出して、ソースと録音されたマイクロフォン間にランダムな遅延を導入してみると、モデルの仮定が破られるにつれてFastICAが崩壊し始めるのを見ることができます。

rng = np.random.default_rng(8675309)t = np.linspace(0, 11, 11000)x = np.array([    np.sin(2 * np.pi * t),     np.sin(2 * np.pi / 2 * t + 1),     np.sin(2 * np.pi / 2 * 2 * t + 2)])mixing = rng.uniform(-1, 1, [3, 3])# 乱数生成された混合行列が逆行列であることを確認assert np.linalg.matrix_rank(mixing) == 3demixing_true = np.linalg.inv(mixing)delays = rng.integers(100, 500, (3, 3))y = np.zeros(x.shape)for source_i in range(3):    for signal_j in range(3):        x_ = x[source_i, delays[source_i, signal_j]:]        y[signal_j, :len(x_)] += mixing[source_i, signal_j] * x_t = t[:10000]x = x[:, :10000]y = y[:, :10000]fica = FastICA(3)z = fica.fit_transform(np.transpose(y))z = np.transpose(z)z /= np.reshape(np.max(z, 1), (3, 1))fig, ax = plt.subplots(3, 1, figsize = (8, 5))for ii in range(3):    ax[0].plot(t, x[ii])    ax[1].plot(t, y[ii])    ax[2].plot(t, z[ii])ax[0].set_title("独立したソース")ax[1].set_title("ランダムで線形的な時間遅れの混合信号")ax[2].set_title("ICAコンポーネント(符号と線形スケーリングが一致する)")plt.tight_layout()
遅延ミックス信号のためのFastICA:デミックスコンポーネントがソース信号の形状から逸脱することに注意してください。

タイミングの問題

ICAがこれらのタイムディレイを処理できない理由を少し詳しく調べることは価値があります。なぜなら、既に未知のミキシングに取り組んでいるので、少しの時間的な変動に対応できるはずですよね?さらに進んで言えば、構造化データ上のバニラICAは順列不変です!時間系列や画像データセットのサンプリングやピクセルの順序をシャッフルしても、ICAからは同じ結果が得られます。では、なぜICAはこれらの時間的な遅延に対して頑健でないのでしょうか?

リアルワールドのカクテルパーティの問題は、スピーカーとマイクのペアごとに異なるタイムディレイが存在することです。スピーカーからの各デジタルサンプルを、ランダム変数からのドローイングと考えてみましょう。遅延がない場合、各マイクロフォンは同じサンプルを同じタイミングで聞いています。しかし、リアルワールドでは、各マイクロフォンは同じスピーカーの異なる遅延サンプルを記録し、ミキシング行列Aが未知であるように、時間的な遅延も未知です。そして、もちろん、実際の問題は単一のラグ値以上に悪いです:反響、エコー、および減衰により、音源信号はマイクロフォンに到達する前にさらに広がります。

この複雑な時間的な遅延を表すために、モデルの定式化を更新してみましょう。部屋の基礎的な音響が実際には変わらず、マイクロフォンとスピーカーが同じ場所にあると仮定すると、次のように書くことができます:

ここで、kは離散時間遅延インデックスを示し、ミキシング行列Aはk = 0…Tで変動する行列関数です。言い換えれば、i番目のマイクロフォンの実際の観測は、過去Tサンプルのソースの線形ミキシングです。また、さらに簡単な問題である単一の時間遅延の場合(より複雑な音響効果を含まない場合)、上記のモデル定式化の部分ケースであり、(i、j)インデックスペアごとに行列Aが1つのk値で非ゼロの形状を取ることにも気付けます。

数学に傾倒している方、または信号処理の奥義に浸っている方は、リアルワールドのカクテルパーティ問題の実際のモデル⁴が畳み込みに非常に似ていることに気付くでしょう。実際、これは機能的な畳み込みの離散アナログであり、フーリエ変換を経由して問題の周波数領域バージョンへと到達することができるかもしれません。

ここには多くの展開があります。カクテルパーティの畳み込み表現は、ICAがBSS問題の素朴な取り扱いでは失敗することを簡潔に示します。現実のマルチセンサーオーディオ録音はほとんど間違いなくデコンボリューションの問題であり、線形なデミキシングの問題ではありません。問題に対する解の近似をすることは依然として可能かもしれません(以下でいくつかの戦略について議論します)、しかしICAは時系列の時間領域で空間的に有意義なデミキシングを提供するものとは想定されていません(さらなる作業なしに)。

おもちゃの例をもう一度見直して、ランダムな絶対遅延と長さの非線形畳み込みを設計することで、畳み込みを模倣することができます。この場合、FastICAのコンポーネントソリューションが元のソース信号から大幅に逸脱していることがよく分かります。

rng = np.random.default_rng(8675309)t = np.linspace(0, 11, 11000)x = np.array([    np.sin(2 * np.pi * t),     np.sin(2 * np.pi / 2 * t + 1),     np.sin(2 * np.pi / 2 * 2 * t + 2)])mixing = rng.uniform(-1, 1, [3, 3])# check that our randomly generated mixing is invertibleassert np.linalg.matrix_rank(mixing) == 3demixing_true = np.linalg.inv(mixing)delays = rng.integers(100, 500, (3, 3))impulse_lengths = rng.integers(200, 400, (3, 3))y = np.zeros(x.shape)for source_i in range(3):    for signal_j in range(3):        impulse_length = impulse_lengths[source_i, signal_j]        impulse_shape = np.sqrt(np.arange(impulse_length).astype(float))        impulse_shape /= np.sum(impulse_shape)        delay = delays[source_i, signal_j]        for impulse_k in range(impulse_length):            x_ = x[source_i, (delay + impulse_k):]            y[signal_j, :len(x_)] += (                mixing[source_i, signal_j]                 * x_ * impulse_shape[impulse_k]            )t = t[:10000]x = x[:, :10000]y = y[:, :10000]fica = FastICA(3)z = fica.fit_transform(np.transpose(y))z = np.transpose(z)z /= np.reshape(np.max(z, 1), (3, 1))fig, ax = plt.subplots(3, 1, figsize = (8, 5))for ii in range(3):    ax[0].plot(t, x[ii])    ax[1].plot(t, y[ii])    ax[2].plot(t, z[ii])ax[0].set_title("独立したソース")ax[1].set_title("ランダムに畳み込まれた信号")ax[2].set_title("ICAコンポーネント(符号と線形スケーリングに合致)")plt.tight_layout()
FastICA for Convolved Signals: Notice that the demixed components diverge significantly from the source signal shapes.

一方、周波数空間のバージョンは、少なくとも線形混合問題としてICAモデルの問題に似てきています。完璧ではありません:フーリエ変換された混合行列関数は、周波数空間では定常ではありません。しかし、これはおそらく問題に取り組むために取り組みたい場所であり、より一般的な除却戦略の出発点でもあります。

「現実世界」とICA

何をするにしても、カクテルパーティで音源分離のためにICAを使用しないでください。ただし、ICAが有用な現実の状況はありますか?

ICAの最も一般的な応用の1つ、脳波測定(EEG)の特徴化と分解を考えてみましょう。EEG信号は、頭皮の電極から(時には脳内の電極から)の電位の時間系列録音です。EEGデータの前処理にICAを適用して、脳と身体の独立した電位信号の独立した源を特定するという産業があります。

EEGの記録では、瞬時混合のICAモデルの仮定は確かに満たされています:電気信号は人間の頭部の長さスケールおよびサンプリング周波数のオーダーに対してほぼ瞬時的に伝播します。これはICAにとって良い兆候ですし、実際には独立したコンポーネントは一般的にいくつかの空間的に有意味のある特徴を分離します。眼球の動きや筋肉の運動(皮膚の伝導率により信号が頭皮に伝播する)は、しばしば明らかに異なるコンポーネントです。他のコンポーネントは頭皮上の電極活性化の見かけ上意味のあるパターンになり、これらの活性化は、脳内の放射性二極子源として機能する神経細胞の集合体によるものと考えられています。このような源の三次元位置と方向は、頭皮上の電極位置の正確な座標マッピングを用いてさらに推定することができます。

ここで瞬時混合の仮定が満たされていることは確立されていますが、他のモデルの仮定はどうでしょうか?頭皮上の電極が動かず、対象がそれ以外で静止している場合、一定の混合も合理的な仮定かもしれません。計測しているチャンネルがソースよりも多いですか?ICAは、記録された信号チャンネルよりも多くの独立成分を生成しませんが、真のソースが識別可能な数よりもはるかに多い場合、成分に空間的な意味を付加することは問題となる可能性があります。

最後に、ソースは独立していますか?ここで事態は非常に複雑になることがあります!放射性二極子源は、もちろん、単一のニューロンではなく、多くの多くのニューロンの集団の発火活動です。EEGのサンプリング時間尺度では、これらの連合ニューロンクラスタがお互いに独立しているとどの程度信じるかは?10年前、MakeigとOntonによるこのトピックについての広範な議論と調査が行われました。要点は、ソースは局所的に連結した大脳皮質ニューロンパッチと考えられているということです。近くの接続に対する遠隔接続の強度は、いずれも電気ポテンシャル(局所化された源を中心としたもの)の「池波紋」のようなものを生じ、空間的に分離されたパッチ間の依存性をおそらく減少させます。ただし、EEGを介したICAによる畳み込みミキシングの複素数領域での調査への間欠的な興味が存在しました。

逆畳み込みとICA

現実のカクテルパーティが示す逆畳み込み問題をどうやって解決するために、ICAはまだ使用できるのでしょうか?BSS逆畳み込み問題の周波数空間表現に戻ってみましょう。ICAが対処できるものに非常に近いことを思い出してください…ミキシング行列は線形変換ですが、主な問題は、周波数の関数として定常ではないということです。 (以下略)

理論上、周波数スペクトル全体にわたって静的なICAソリューションを補間することができます。したがって、10-15 kHzのICAデミキシングソリューションと15-20 kHzの別のソリューションがある場合、12.5 kHzと17.5 kHzを中心に2つのソリューションを補間し、それらの2点間の周波数のミキシング関数を推測することができます。

ただし、解決する必要があるいくつかの曖昧さがあります。まず、デミキシング行列は単なるベクトルではなく、いくつかの追加のグループ構造を持っていることに注意を払う必要があります。第二に、ICAソリューションの成分は、置換とスケーリングに対して不変です…言い換えると、ICAを基底の変換と考えると、基底方向の並べ替えや符号/大きさの変更は同じくらい良いソリューションになります。そのため、周波数空間に分散したICAを行うための戦略は、隣接する周波数セットでのICAソリューション間のマッチングと一貫性の問題を解決する方法に要約できます。

Mixed Cocktails(著者の画像)

気ままで注意深い特徴付け

これに関しては、より広範に適用可能な教訓があるはずです。ICAは非常に強力な分解技術であり、そのモデルの仮定が満たされているかどうかについていくつかの曖昧さがあっても問題ありません。実際には、私は研究者として、次元削減のためにほとんど常にFastICAを使用するでしょう – もしくは少なくともPCAと比較しています。特に、BSSの形式的な解釈がないような抽象的なデータに対してFastICAを試してみるのが好きです。

なぜICAを一般的に使用できるのでしょうか?なぜなら、アルゴリズム自体がBSSソリューションへの抽象的な近似のみだからです。FastICAはその名の通り行います:データ成分が最大非ガウスである変換を見つけます – これは尖度によって推定されます(多少)。この変換が物理的に意味のある独立したソースと一致する場合、それは素晴らしいことです!もしそうでない場合でも、PCAと同様に抽象的に使用することができる有用な変換です。実際には、PCAとFastICAは非常に弛緩に関連しています – それぞれを第2および第4次統計量を最適化する基底変換と考える場合です。

ただし、ICAの結果についてサポートされる以上のことを読み取る際には注意が必要です。ICA成分が最大限に独立または非ガウスであると言いたいのは問題ありません!しかし、ICA成分が物理的に意味のある異なるソースであると言えるでしょうか?ここで提示した仮定を満たす基礎となるBSSモデル問題がある場合に限ります。抽象的なICA成分は、非線形性と畳み込みの層の下に埋もれた有用な関係性の指標である可能性もあります。モデルの仮定を検証せずにICAの解釈に過度の負荷をかけないよう注意する必要があります。

参考文献と脚注

[1] ICAの歴史的にもっとも重要なフレーバーであるFastICAとInfomax ICAについては、次のものにさかのぼります:

  1. HyvärinenとE. Oja、「A Fast Fixed-Point Algorithm for Independent Component Analysis(1997年)、Neural Computation

A. BellとT. Sejnowski、「An Information-Maximization Approach to Blind Separation and Blind Deconvolution(1995年)、Neural Computation

[2] C. Maklin、「Independent Component Analysis (ICA) In Python(2019年)、Towards Data Science

[3] J. Dieckmann、「Introduction to ICA: Independent Component Analysis(2023年)、Towards Data Science

[4] ここでは、音声録音の境界、例えばt=0を無視しているため、少しだけ表記法を乱用しています。心配しないでください!結局のところ、すべては数学の表現法の乱用です。

[5] は「現実世界」でモデルが完全に真実であることはあり得るのか? いいえ、Dr. Boxは答えます。 Rob Thomasも迷惑されることに嫌気が差しています。

[6] S. MakeigとJ. Ontonは、「ERP features and EEG dynamics: An ICA perspective」(2012年)、The Oxford Handbook of Event-Related Potential Componentsで述べています。

[7] J. Anemüller、T. J. Sejnowski、およびS. Makeigは、「Complex independent component analysis of frequency-domain electroencephalographic data」(2003年)、Neural Networksで述べています。

[8] A. Hyvärinen、P. Ramkumar、L. Parkkonen、およびR. Hariは、「Independent component analysis of short-time Fourier transforms for spontaneous EEG/MEG analysis」(2009年)、NeuroImageで述べています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more