忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【Qiskit】CNOTゲートの仕組みを徹底検証!制御ビットで対象が変わる動きを確認しよう

前回までに、1量子ビットでの重ね合わせと測定、そしてQiskit標準シミュレータ(BasicSimulator)を使った実行方法を学びました。

今回はステップアップして、**2量子ビットを使った量子プログラミングの基本パーツ「CNOTゲート(制御NOTゲート)」**の動きを検証してみたいと思います。CNOTゲートが「条件によって標的を反転させる」という挙動を、実際のコードとシミュレーション結果から確かめてみましょう。

1. CNOTゲートとは?

CNOTゲートは、量子コンピュータにおける「もし〜なら〜する(if文)」のような役割を持つ超重要パーツです。2つの量子ビットを使い、次のようなルールで動作します。

  • 制御ビット(Control):条件を決める側の量子ビットです。
  • 標的ビット(Target):制御ビットの状態に応じて値が反転するかどうか変わる側の量子ビットです。
  • 制御が「0」の場合:標的ビットは何もしません(そのまま)。
  • 制御が「1」の場合:標的ビットの値を反転(0なら1に、1なら0に)させます。

2. 比較検証のサンプルコード

制御ビットが「0」の場合と「1」の場合で、CNOTゲートを通った後に標的ビットがどう変わるのかを比較するコードを作成します。

from qiskit import QuantumCircuit
from qiskit.providers.basic_provider import BasicSimulator

simulator = BasicSimulator()

print("=== パターンA: 制御ビットが「0」の場合 ===")
qc_a = QuantumCircuit(2, 2)
# 制御ビット(0番目)は何もしない(初期状態の「0」のまま)
qc_a.cx(0, 1)  # CNOTゲート適用(制御=0, 標的=1)
qc_a.measure(0, 0)
qc_a.measure(1, 1)

result_a = simulator.run(qc_a, shots=1000).result()
print(f"回路図:\n{qc_a.draw(output='text')}")
print(f"実行結果: {result_a.get_counts()}\n")

print("=== パターンB: 制御ビットが「1」の場合 ===")
qc_b = QuantumCircuit(2, 2)
qc_b.x(0)      # Xゲートで制御ビット(0番目)を「1」にする
qc_b.cx(0, 1)  # CNOTゲート適用(制御=0, 標的=1)
qc_b.measure(0, 0)
qc_b.measure(1, 1)

result_b = simulator.run(qc_b, shots=1000).result()
print(f"回路図:\n{qc_b.draw(output='text')}")
print(f"実行結果: {result_b.get_counts()}")

3. 実際の実行結果と回路図

ターミナルでスクリプトを実行すると、それぞれのパターンで以下のような回路図と実行結果が得られます。

=== パターンA: 制御ビットが「0」の場合 ===
回路図:
         ┌─┐   
q_0: ──■──┤M├───
     ┌─┴─┐└╥┘┌─┐
q_1: ┤ X ├─╫─┤M├
     └───┘ ║ └╥┘
c: 2/══════╩══╩═
           0  1 
実行結果: {'00': 1000}

=== パターンB: 制御ビットが「1」の場合 ===
回路図:
     ┌───┐    ┌─┐   
q_0: ┤ X ├──■──┤M├───
     └───┘┌─┴─┐└╥┘┌─┐
q_1: ─────┤ X ├─╫─┤M├
         └───┘ ║ └╥┘
c: 2/═══════════╩══╩═
                0  1 
実行結果: {'11': 1000}

4. 結果の解説:CNOTゲートの動き

得られた結果を整理してみましょう。

  • パターンA(制御が「0」):制御ビットが 0 のため、標的ビットは反転せずそのまま 0 を維持しました。そのため、結果はすべて 00(1,000回)になっています。
  • パターンB(制御が「1」):Xゲートで制御ビットを 1 にしたため、CNOTゲートが働いて標的ビットが反転(0 から 1 へ)しました。その結果、両方とも 1 になり、結果はすべて 11(1,000回)になっています。
CNOTゲートの「条件分岐」動作を完全確認!
制御ビットの値(0か1か)によって、もう一方の標的ビットの運命が変わる様子がシミュレーションでハッキリと証明できました。

まとめ

今回は、2量子ビットの基本操作であるCNOTゲートの挙動をコードとシミュレーションで確認しました。制御ビットの状態に応じて標的が変わる仕組みがよく分かったと思います。このCNOTゲートの組み合わせこそが、量子もつれ(エンタングルメント)を生み出す鍵になります!


PR

【DS検定対策】見た目に騙されるな!「多項式回帰」が線形回帰と呼ばれる理由

データ分析の試験で最も多くの人が引っかかる超・トラップ問題があります。それが「説明変数を2乗や3乗(冪乗)したモデルは、線形回帰か?非線形回帰か?」という問いです。結論から言うと、これは「線形回帰」に分類されます!なぜそうなるのか、理由をスッキリ整理しましょう。

1. 【 問題 】

説明変数 x の2乗や3乗といった冪乗(多項式)を含む回帰モデル「 y = b0 + b1*x + b2*(x^2) 」に関する説明として、最も適切なものはどれか。

① グラフを描くと曲線になるため、「非線形回帰モデル」に分類される。
② 説明変数 x に対して曲線の関係を表すが、推定するパラメータ(係数 b)に関して一次式であるため、「線形回帰モデル」に分類される。
③ 最小二乗法で解くことができず、必ずディープラーニングなどの複雑な数値計算アルゴリズムが必要となる。
④ パラメータの最適化が不可能であるため、実務では使用してはならない。


2. 【 解答 】

正解: ② 説明変数 x に対して曲線の関係を表すが、推定するパラメータ(係数 b)に関して一次式であるため、「線形回帰モデル」に分類される。

3. 整理:なぜ曲線なのに「線形(Linear)」なのか?

「線形=まっすぐな直線」というイメージが強いため混乱しがちですが、統計学における「線形」の意味を正しく理解することがポイントです。

【 「線形」の定義の違い 】

変数の形(x)で見ると
x^2 や x^3 が入っているため、グラフを描くと綺麗な「曲線」を描きます。

パラメータの形(係数 b)で見ると
係数 b0, b1, b2 はすべて「1乗(掛け算・割り算・指数になっていない)」で並んでいます。

決定的な結論:
統計学における「線形回帰」とは、「パラメータ(係数 b)に関して線形(1乗の足し算)であること」を指します!
そのため、x^2 を「新しい別の変数 z」と置き換えれば、単なる普通の「重回帰分析」と全く同じ形になるため、「線形回帰」の一種(多項式回帰)として扱われるのです。

4. 本物の「非線形回帰」とはどんなもの?

では、逆にどういう式が「非線形回帰」になるのでしょうか?比較して覚えておきましょう。

分類モデルの構造(イメージ)特徴
線形回帰
(多項式回帰含む)
y = b0 + b1*x + b2*(x^2)
※パラメータ b はすべて1乗の足し算
x が何乗になっていても、パラメータ b が1乗なら線形回帰。最小二乗法で一発で解ける。
非線形回帰 y = b0 * e^(b1 * x)
※パラメータ b が指数の肩に乗っているなど
パラメータ自体が指数や複雑な関数の内側に入っている。最小二乗法では解けず、繰返し計算(数値最適化)が必要。

5. DS検定形式:実戦4択クイズ

問:多項式回帰(説明変数に2乗や3乗の項を含める線形回帰)を実務で適用する際の注意点として、最も適切なものはどれか。

① 次数(2乗、3乗、4乗…)を大きく増やしていくほど、モデルの表現力が高まり、未知のデータに対する予測精度(汎化性能)は常に向上する。
② 次数を大きくしすぎると、学習データに過剰に適合してしまい、「過学習(オーバーフィッティング)」を起こしやすくなる。
③ 多項式回帰は線形モデルであるため、どれだけ次数を増やしても過学習を起こすことは構造上あり得ない。
④ 説明変数の2乗の項を追加すると、入力データの次元数が減少し、モデルが単純化される。

【 正解: ② 】

解説: 多項式回帰の実務的な注意点を問う良問です。
次数をどんどん大きくしていく(例:10乗、20乗…)と、モデルのグラフは学習データの全ポイントを無理やり通ろうとしてグニャグニャに曲がりくねり、「過学習(オーバーフィッティング)」を起こします。
実務では、適切な次数を選ぶか、Lasso・Ridgeなどの正則化手法と組み合わせて過学習を防ぐ必要があります。


6. まとめ

DS検定や統計検定において、「説明変数が冪乗(xの2乗など)になっているモデルは何か?」と聞かれたら、罠にハマらず「線形回帰(多項式回帰)」と答えられるようにしておきましょう! 「線形か非線形かは、x の形ではなく、パラメータ(係数)の形で決まる」という本質を押さえておけば、どんな引っかけ問題も怖くありません!

【Qiskit】追加インストールなし!標準シミュレータで量子回路を実行してみよう

前回までに、Hゲートを使った「重ね合わせ」の作り方と、結果を取り出すための「測定(Measure)」の仕組み、そして回路図の見方を学びました。

今回は、追加のパッケージ(qiskit-aerなど)をわざわざインストールしなくても使えるQiskit標準のシミュレータ(BasicSimulator)を利用して、実際に回路を動かし、確率的な計算結果を取得してみたいと思います。

1. 実行用サンプルコード

以下のコードを sample_run.py として保存して実行します。Qiskitのコア機能だけで完結するため、環境構築が非常にシンプルです。

from qiskit import QuantumCircuit
from qiskit.providers.basic_provider import BasicSimulator

# 1量子ビットと、測定結果を記録する古典ビットを1つ準備
qc = QuantumCircuit(1, 1)

# Hゲートで重ね合わせ状態を作成
qc.h(0)

# 0番目の量子ビットを測定し、0番目の古典ビットに保存
qc.measure(0, 0)

# Qiskit標準の内蔵シミュレータを準備
simulator = BasicSimulator()

# 回路を1000回実行(シミュレーション)
result = simulator.run(qc, shots=1000).result()

# 実行結果から「0」と「1」が出た回数を取得
counts = result.get_counts()

print(f"実行結果: {counts}")

2. 実際の実行結果

ターミナルでこのスクリプトを実行すると、以下のような結果が出力されます。

% python sample_run.py
実行結果: {'1': 508, '0': 492}

3. 結果の解説:なぜこの数値になるのか?

得られた結果を詳しく見てみましょう。

  • 0 が 492回、1 が 508回という内訳になっています。合計するとちょうど 1,000回(shots=1000)の試行が行われていることがわかります。
  • Hゲート(アダマールゲート)を通った量子ビットは、「0である確率」と「1である確率」がちょうど半々(50%ずつ)の重ね合わせ状態になります。
  • それを1,000回測定したため、理論値である 50:50(各500回前後)に非常に近い、確率的な揺らぎを持った数値が再現されました。
量子コンピュータの確率的振る舞いをコードで実証!
ただの理論だけでなく、シミュレーションを通じて「半々の確率で0と1がランダムに出現する」という量子力学の現象を手元のPCで確認できました。

まとめ

今回は、Qiskit標準の BasicSimulator を使って、重ね合わせ回路の実行から統計データの取得までを体験しました。回路を作って測定し、結果を数字として受け取るという、量子プログラミングの基本サイクルがこれでバッチリ完了です!



【DS検定対策】入力をそのまま復元!?自己符号化器「オートエンコーダ」の仕組み

画像やデータの「次元削減」や「ノイズ除去」、「異常検知」などで大活躍するディープラーニングの手法、それが「オートエンコーダ(自己符号化器)」です。正解データ(ラベル)がない「教師なし学習」でありながら、どのように学習を進めるのかその仕組みを整理しましょう!

1. 【 問題 】

ニューラルネットワークを用いた「オートエンコーダ(自己符号化器)」の学習方法に関する説明として、正しいものはどれか。

① 入力データとは異なる外部の正解ラベル(正解クラス)を与え、分類誤差を最小化するように勾配降下法で学習する。
② 出力データが入力をそのまま復元したもの(入力と同じ)になるように目標を設定し、復元誤差を最小化するように勾配降下法で学習する。
③ 正解の出力は設定せず、データの分散が最大になる方向へデータを射影するように主成分分析(PCA)の行列演算のみで学習する。
④ 2つのネットワーク(生成器と識別子)を戦わせることで、正解ラベルなしで入力データと同じ分布を学習する。


2. 【 解答 】

正解: ② 出力データが入力をそのまま復元したもの(入力と同じ)になるように目標を設定し、復元誤差を最小化するように勾配降下法で学習する。

3. 整理:砂時計型の構造と「Encoder / Decoder」

「自分自身を入力にして自分自身を出力するのに、何の意味があるの?」と一瞬思うかもしれませんが、その秘密はネットワークの中央にある「ギュッと縮んだボトルネック(砂時計のくびれ部分)」にあります。

【 オートエンコーダの構造 】

[入力データ]

Encoder(符号化器)】:次元をギュッと圧縮して、重要な情報だけを抽出

潜在表現(コード / ボトルネック)]★データの特徴が凝縮された状態

Decoder(復元器)】:圧縮された情報から、元のデータを復元しようとする

[出力データ(復元された入力)]

学習のメカニズム:
「元の入力」と「復元された出力」を見比べ、そのズレ(復元誤差)を計算します。そして、その誤差が限りなくゼロに近づくように、ディープラーニングの基本アルゴリズムである「勾配降下法(および誤差逆伝播法)」を使ってネットワークの重みを更新(学習)していきます。


4. 何に使える?実務での主な活用例

試験では「オートエンコーダの用途」についてもよく問われます。

活用用途仕組み・理由
次元削減・特徴抽出 中央のボトルネック部分を取り出すことで、高次元のデータを本質的な情報だけ残した低次元データに圧縮できます(非線形なPCAのようなイメージ)。
ノイズ除去(De-noising) ノイズ混じりの画像を入力し、綺麗な画像を出力するように学習させることで、画像から雑音を取り除くモデルが作れます。
異常検知(Anomaly Detection) 「正常なデータ」だけを学習させたオートエンコーダに「異常データ」を入力すると、上手く復元できず誤差が大きくなります。この復元誤差の大きさを判定して異常を検知します。

5. DS検定形式:実戦4択クイズ

問:オートエンコーダ(Autoencoder)に関する記述として、最も不適切なものはどれか。

① 正解ラベルを必要としない「教師なし学習」の一種である。
② 入力層と出力層の次元数(ユニット数)は基本的に同じになる。
③ 中間層(潜在空間)の次元を入力層より小さくすることで、データ圧縮や特徴抽出が可能になる。
④ 画像の局所的な特徴をとらえるために、フィルタ処理(畳み込み演算)を適用することは構造上不可能である。

【 正解: ④ 】

解説: 不適切な選択肢を選ぶ問題です。
オートエンコーダに畳み込み層(CNN)を組み込んだ手法は「畳み込みオートエンコーダ(CAE:Convolutional Autoencoder)」と呼ばれ、画像認識や画像圧縮の分野で非常に一般的に利用されています。したがって「構造上不可能」とする④が誤り(正解)です。


6. まとめ

DS検定やG検定で「正解の出力は入力と同じ」「勾配降下法で復元誤差を最小化する」「次元削減や異常検知に使う」といったキーフレーズが出たら、正解は「オートエンコーダ」です。 教師なし学習でありながら、勾配降下法という教師あり学習と同じ仕組みを使って自力で特徴を学習する面白さを押さえておきましょう!

【DS検定対策】LLMの革命的基盤!「トランスフォーマー」とAttention機構の仕組み

現在の生成AIや大規模言語モデル(LLM)の発展は、2017年に発表されたたった1つのモデル構造から始まりました。それが、自然言語処理の歴史を塗り替えた「トランスフォーマー(Transformer)」です。

1. 【 問題 】

大規模言語モデル(LLM)を実現するディープラーニングモデルの中で、文章中の離れた単語同士の関係性(長距離依存関係)を効果的に学習し、並列処理を可能にした革命的なモデル構造は何でしょうか?

① トランスフォーマー(Transformer)
② RNN(Recurrent Neural Network)
③ CNN(Convolutional Neural Network)
④ 決定木(Decision Tree)


2. 【 解答 】

正解: ① トランスフォーマー(Transformer)

3. 整理:なぜトランスフォーマーは「離れた単語の関係」を学べるのか?

従来のモデル(RNN)とトランスフォーマーの違いを整理すると、現代のLLMがなぜこれほど強力なのかがスッキリ理解できます。

【 従来のRNN vs トランスフォーマー 】

従来のRNN(逐次処理)
文章を左から右へ「1単語ずつ順番」に処理していく方式。
弱点: 長い文章になると、最初の方に出てきた単語の情報を途中で忘れてしまい、離れた単語同士の関係(例:「1行目の代名詞」が「5行目のどの名詞」を指すか)を学習するのが苦手でした。

トランスフォーマー(並列処理 + Attention)
文章全体を「一括で一気に」読み込む方式。
強み: 後述する「Self-Attention(自己注意機構)」のおかげで、文章内のすべての単語からすべての単語への関連度(重み)をダイレクトに計算できるため、離れた位置にある単語同士の関係性を正確に捉えることができます。

4. 試験で絶対に出る「Self-Attention(自己注意機構)」とは?

トランスフォーマーの心臓部であり、試験で最も狙われるキーワードが「Self-Attention」です。

【 具体例:「それ」は何を指している? 】

例文:「が道路を走っていたが、疲れていたのでそれは途中で立ち止まった。」

人間なら「それ = 犬」だと即座に分かりますが、コンピューターにとっては「それ」が「道路」なのか「犬」なのかを見極めるのは難しい課題でした。

Self-Attentionは、文章中の全単語同士の「注目度(関連の強さ)」をスコア化します。
「それ」という単語を処理する際、離れた場所にある「犬」という単語との間に高い注目度スコア(Attention Weight)を自動的に割り振ることで、「離れた単語間の文脈・意味のつながり」を正しく理解できるようになっているのです。


5. DS検定形式:実戦4択クイズ

问:トランスフォーマー(Transformer)に関する記述として、最も適切なものはどれか。

① 画像の局所的な特徴を抽出することに特化しており、主にエッジ検出や物体認識の分野で標準的に使用される。
② 時系列データを1ステップずつ順番に処理する必要があるため、GPUによる大規模な並列計算・高速学習には向いていない。
③ 論文「Attention Is All You Need」(2017年)で提案され、再帰構造(RNN)を使わずにAttention機構のみで文脈をモデル化した。
④ 入力データの次元を削減するための非線形手法であり、主成分分析(PCA)の発展型として開発されたアルゴリズムである。

【 正解: ③ 】

解説: AI史に残る名著論文「Attention Is All You Need」に関する歴史的背景です。
トランスフォーマーはRNNを排除してAttention機構のみで構築されたことで、GPUによる圧倒的な**「並列処理(高速学習)」**が可能になりました。これが、現在のLLM(GPT-4、Geminiなど)が大量のWebデータから高速に学習できた最大の理由です!(①はCNN、④は次元削減の説明です)


6. まとめ

DS検定やAI関連の資格試験において、「LLM」「離れた単語の関係(長距離依存)」「Attention」「並列処理」というキーワードが出たら、正解は「トランスフォーマー(Transformer)」です。 ディープラーニングにおける最新トレンドの最重要概念ですので、Self-Attentionの仕組みとセットで確実に得点源にしていきましょう!