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

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



PR

【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の仕組みとセットで確実に得点源にしていきましょう!

【DS検定対策】境界線の余白を最大化せよ!SVMの核心「マージン」とサポートベクター

分類アルゴリズムの王様と呼ばれる「サポートベクターマシン(SVM)」。データをただ2つに分けるだけでなく、最も判定が難しいギリギリのデータからの「距離(余白)」を最大に保つことで、高い予測精度を実現しています。

1. 【 問題 】

サポートベクターマシン(SVM)において、学習用データの中で「決定境界(データを分ける線)」に最も近いデータ点(サポートベクター)と、決定境界との間の「距離(余白)」のことを何と呼ぶでしょうか?

① マージン
② コストパラメータ
③ スラック変数
④ ラグランジュ乗数


2. 【 解答 】

正解: ① マージン

3. 整理:図でイメージするSVMの「マージン最大化」

言葉の定義だけでなく、SVMがどのように境界線を引いているのか、その仕組みをスッキリ整理しましょう!

【 機械学習(SVM)の境界線の引き方 】

決定境界(ハイパープラン)
2つのグループ(例えば「○」と「×」)を綺麗に分ける中心線。

サポートベクター
決定境界のすぐ近くに位置する、境界線に最も近い「ギリギリのデータ点」。

マージン(Margin)
サポートベクターから決定境界までの「距離(安全余白)」。

なぜマージンを大きくする(最大化する)のか?
2つのデータを分ける線(決定境界)自体は、実はいくらでも引くことができます。
しかし、境界線がデータギリギリを攻めていると、新しく入ってきた未知のデータに対応できず誤判定を起こしやすくなります。
そこでSVMは、「両方のグループの最寄りデータから、一番距離(マージン)が広くなる真ん中に線を引く」ことで、未知のデータに対しても誤判定しにくい強固なモデル(高い汎化性能)を作り出しているのです。


4. 試験で絶対に出る「ハードマージン」と「ソフトマージン」

検定試験において、マージンとセットで出題されるのがこの2つのアプローチの違いです。

種類特徴メリット・デメリット
ハードマージン データの「誤分類(間違い)を一切許さない」厳密な分け方。データが綺麗に直線で分けられる場合(線形分離可能)のみ使える。 ノイズや外れ値に弱く、現実の複雑なデータには適用しにくい。
ソフトマージン
★実務の主流
現実のデータは多少混ざり合っているため、「多少の誤分類(間違い)を許容しながら」マージンを最大化する分け方。 スラック変数やハイパーパラメータ(C値)を調整して柔軟にモデル化できる。

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

問:サポートベクターマシン(SVM)に関する記述として、最も適切なものはどれか。

① マージンを決定する際に必要なデータは、決定境界から遠く離れた外れ値データのみであり、境界近くのデータは無視される。
② ソフトマージンSVMにおいて、ペナルティを表すハイパーパラメータ(C値)を非常に大きく設定すると、誤分類を許容する柔軟なモデルになる。
③ 直線で分けることができない非線形なデータに対しては、カーネル関数を用いて高次元空間に写像することで直線的に分離できるようにする。
④ 決定木を並列にたくさん作成し、多数決によって予測結果を出力するアンサンブル学習アルゴリズムである。

【 正解: ③ 】

解説: SVMのもう一つの大目玉である「カーネル法(カーネルトリック)」の説明です。
①境界近くのデータ(サポートベクター)こそが決定境界を決めます。
②ハイパーパラメータ C を大きくすると「誤分流を許さない(ハードマージンに近づく)」方向に向かいます。
④はランダムフォレストなどの説明です。直線で分けられないデータ(非線形)を次元を上げてバシッと直線(超平面)で切るのが「カーネル関数」の役割です!


6. まとめ

DS検定や情報処理技術者試験において「SVMで決定境界に最も近いデータと決定境界との距離」と聞かれたら、正解は「マージン」です。 「サポートベクター(最寄りのデータ)」と「マージン(余白の最大化)」、そして「カーネル法(非線形対応)」の3点セットで、機械学習分野の得点を確実にゲットしていきましょう!

【Qiskit】量子回路の基本:回路構築から「測定」の前まで

量子コンピュータのプログラミングでは、量子ゲートを使って回路を構築するだけでは計算結果を得ることができません。量子ビットは計算が終わるまで確率的に揺らぎ続けているため、最終的な結果を取り出すためには、必ず「測定(Measure)」という工程が必要になります。

1. 測定を含む量子回路の構築

Qiskitにおいて結果を確認するための回路を作成します。QuantumCircuit(1, 1) と記述することで、1つの量子ビットと、測定結果を書き込むための「1つの古典ビット」を準備します。この古典ビットを用意して測定を行わない限り、量子計算の結果を数値として読み出すことはできません。

from qiskit import QuantumCircuit

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

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

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

# 回路を描画
print(qc.draw(output='text'))

2. 実行結果(回路図)

ターミナルで実行すると、以下のように測定ゲート(M)が配置された回路図が表示されます。

% python sample_measure.py
     ┌───┐┌─┐
q: ┤ H ├┤M├
     └───┘└╥┘
c: 1/══════╩═
           0

3. 回路図の読み方と「0」の意味

この回路図には、重要な情報が可視化されています。

  • c: 1/ : 測定結果を保存するための古典的な記録領域です。ここへ情報を書き出すことではじめて、人間が結果を読み取れます。
  • ╩(二重線) : 測定(M)によって、量子情報が古典ビットへと「確定」して送られる様子を表しています。
  • 一番下の「0」 : これは「結果が0だった」という意味ではありません。「0番目の量子ビットの測定結果を、0番目の古典ビットという『宛先(ID)』に保存する」という接続指示を指しています。

このように、Qiskitで qc.measure(0, 0) を実行することで、量子ビットの確率的な情報を「古典ビットという箱」に固定することができます。これによって、後続のシミュレータ実行時に「0」または「1」という確定した値として結果を得ることができるようになるのです。

量子コンピュータの「観測」プロセスを実装!
Hゲートで確率を作ったら、必ずMeasureで測定して結果を確定させる。これが量子プログラミングの基本です。

次のステップ

測定する場所が確保できたので、次回はいよいよシミュレータを使って、この回路を実際に動かし、統計的な結果(0と1の出現回数)を取得してみたいと思います。