Skip to content
This repository has been archived by the owner on Jan 18, 2024. It is now read-only.

adding translation updates from Platypus #83

Merged
merged 3 commits into from
Nov 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
342 changes: 342 additions & 0 deletions translations/ja/algorithm-design/ansatz/ansatz.ipynb

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1,195 changes: 1,195 additions & 0 deletions translations/ja/algorithm-design/applications/applications.ipynb

Large diffs are not rendered by default.

52 changes: 52 additions & 0 deletions translations/ja/algorithm-design/badge/badge.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"cells": [
{
"attachments": {
},
"cell_type": "markdown",
"metadata": {
},
"source": [
"## バッジの取得\n",
"\n",
"変分アルゴリズムデザインのコースを修了された方、おめでとうございます。評価とバッジに進む前に、以下の1分間のアンケートにお答えください!\n",
"\n",
"\n",
"<iframe class=\"airtable-embed\" src=\"https://airtable.com/embed/shrQPowy7jMqFRsQ0?backgroundColor=blue\" frameborder=\"0\" onmousewheel=\"\" width=\"100%\" height=\"533\" style=\"background: transparent; border: 1px solid #ccc;\"></iframe> "
]
},
{
"attachments": {
},
"cell_type": "markdown",
"metadata": {
},
"source": [
"## バッジ評価へのリンク\n",
"\n",
"[この評価](https://challenges.quantum-computing.ibm.com/algorithm-design) はオープンブックで、このコースで学んだ概念的な知識と実践的な知識をテストします。このコースはいつでも自由に戻って参照することができます!"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
940 changes: 940 additions & 0 deletions translations/ja/algorithm-design/cost_function/cost_function.ipynb

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
455 changes: 455 additions & 0 deletions translations/ja/algorithm-design/instances/instances.ipynb

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
256 changes: 256 additions & 0 deletions translations/ja/algorithm-design/optimization/optimization.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,256 @@
{
"cells": [
{
"attachments": {
},
"cell_type": "markdown",
"metadata": {
},
"source": [
"## 最適化ループ\n",
"\n",
"このレッスンでは、*オプティマイザー*を使用して、ansatz のパラメータ化された量子状態を繰り返し探索する方法を学習します。\n",
"\n",
"- 最適化ループのブートストラップ\n",
"- ローカルおよびグローバルオプティマイザーを使用する際のトレードオフの理解\n",
"- 「不毛な台地」の探索と回避の方法\n",
"\n",
"大まかに言えば、オプティマイザーは探索空間を探索する中心です。オプティマイザーは、コスト関数の評価を使用して、変分ループで次のパラメーターセットを選択し、安定した状態に達するまで処理を繰り返します。この段階で、パラメーター値 $\\vec\\theta^*$ の最適なセットが返されます。\n",
"\n",
"![最適化ワークフロー](images/optimization_workflow.png)"
]
},
{
"attachments": {
},
"cell_type": "markdown",
"metadata": {
},
"source": [
"## ローカルおよびグローバルオプティマイザー\n",
"\n",
"### ローカルオプティマイザー\n",
"\n",
"ローカルオプティマイザーは、初期点 $C(\\vec{\\theta_0})$ から始まるコスト関数を最小化する点を探索し、連続する繰り返しにおいて現在評価している領域で観測したものに基づいて別の点に移動します。これらのアルゴリズムの収束は通常高速ですが、初期点に大きく依存する可能性があります。ローカルオプティマイザーは、現在評価している領域を超えた領域を見ることはできず、極小値に対してとりわけ脆い可能性があり、極小値を見つけると、より望ましい評価結果である他の状態を無視して収束したとみなしてしまいます。\n",
"\n",
"### グローバルオプティマイザー\n",
"\n",
"グローバルオプティマイザーは、ドメインのいくつかの領域 (つまりローカルではない) でコスト関数を最小化する点を探索し、オプティマイザーによって決定された $\\Theta_i := \\{{\\vec\\theta_{i,j} | j \\in \\mathcal{J}_\\text{opt}^i} \\}$ パラメータベクトルで反復的に (繰り返し $i$ ) 評価します。これにより極小値の影響を受けにくくなり、ある程度初期化に依存しなくなる一方で、提示される解への収束も大幅に遅くなります。\n",
"\n",
"### ブートストラップ最適化\n",
"\n",
"*ブートストラップ*、または事前の最適化に基づいてパラメーター $\\vec\\theta$ の初期値を設定すると、オプティマイザーがより速く解に収束するのに役立ちます。 これを初期点 $\\vec\\theta_0$ と呼び、 $|\\psi(\\vec\\theta_0)\\rangle = U_V(\\vec\\theta_0)|\\rho\\rangle$ を初期状態と呼びます。 この初期状態は参照状態 $|\\rho\\rangle$ とは異なります。前者は最適化ループ中に設定された初期パラメーターに焦点を当てているのに対し、後者は既知の「参照」解の使用に焦点を当てているためです。 $U_V(\\vec\\theta_0) \\equiv I$ (つまり、恒等演算) の場合、これらは一致する可能性があります。\n",
"\n",
"ローカルオプティマイザーが最適でない極小値に収束する場合、最適化をグローバルにブートストラップし、ローカルで収束を洗練することを試みることができます。これには2つの変分ワークロードを設定する必要がありますが、オプティマイザーがローカルオプティマイザーだけよりも最適な解を見つけることができるようになります。"
]
},
{
"attachments": {
},
"cell_type": "markdown",
"metadata": {
"gloss": {
"hyperparameter": {
"text": "ハイパーパラメータとは、アルゴリズムを制御するために使用するパラメータです。「ハイパー」は、アルゴリズムが見つけようとするパラメータ(θ)と区別されています。",
"title": "ハイパーパラメータ"
},
"local-minimum": {
"text": "極小値は、$theta$ の値の小さな範囲に対する、関数の最低点です。一方、最小値は、関数のどこにおいても(つまり、どのような $theta$ の値に対しても)最低の点です。<a href='https://en.wikipedia.org/wiki/Maxima_and_minima'>Read more</a>.",
"title": "最小値"
}
}
},
"source": [
"## 勾配ありと勾配なしのオプティマイザー\n",
"\n",
"### 勾配あり\n",
"\n",
"コスト関数 $C(\\vec\\theta)$ において、初期点から関数 $\\vec{\\nabla} C(\\vec\\theta)$ の勾配にアクセスできる場合、関数を最小化する最も簡単な方法は、パラメータを関数の最急降下の方向に更新することです。 つまり、パラメータを $\\vec\\theta_{n+1} = \\vec\\theta_n - \\eta \\vec{\\nabla} C(\\vec\\theta)$ として更新します。ここで、 $\\eta$ は学習率 (更新のサイズを制御する小さな正の[ハイパーパラメータ](gloss:hyperparameter) ) です。 これをコスト関数の極小値 $C({\\vec\\theta^*})$ に収束するまで続けます。[`qiskit.algorithms`](https://qiskit.org/documentation/stubs/qiskit.algorithms.gradients.html) は、勾配を計算するためのいくつかの異なる方法を提供します。詳細については、[こちら](https://learn.qiskit.org/course/machine-learning/training-quantum-circuits#training-2-0)をご覧ください。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
},
"outputs": [

],
"source": [
"from qiskit.circuit.library import TwoLocal\n",
"from qiskit.quantum_info import SparsePauliOp\n",
"from qiskit import QuantumCircuit\n",
"from qiskit_ibm_runtime import QiskitRuntimeService, Estimator\n",
"import numpy as np\n",
"\n",
"# Add your token below\n",
"service = QiskitRuntimeService(\n",
" channel=\"ibm_quantum\",\n",
")\n",
"\n",
"def cost_function_vqe(theta):\n",
" observable = SparsePauliOp.from_list([(\"II\", 2), (\"XX\", -2), (\"YY\", 3), (\"ZZ\", -3)])\n",
" reference_circuit = QuantumCircuit(2)\n",
" reference_circuit.x(0)\n",
"\n",
" variational_form = TwoLocal(\n",
" 2,\n",
" rotation_blocks=[\"rz\", \"ry\"],\n",
" entanglement_blocks=\"cx\",\n",
" entanglement=\"linear\",\n",
" reps=1,\n",
" )\n",
" ansatz = reference_circuit.compose(variational_form)\n",
"\n",
" backend = service.backend(\"ibmq_qasm_simulator\")\n",
" \n",
" # Use estimator to get the expected values corresponding to each ansatz\n",
" estimator = Estimator(session=backend)\n",
" job = estimator.run(ansatz, observable, theta)\n",
" values = job.result().values\n",
"\n",
" return values"
]
},
{
"attachments": {
},
"cell_type": "markdown",
"metadata": {
},
"source": [
"このコスト関数とオプティマイザーを使って、最適なパラメーターを算出することができます"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
},
"outputs": [

],
"source": [
"from qiskit.algorithms.optimizers import SPSA\n",
"\n",
"initial_theta = np.ones(8)\n",
"optimizer = SPSA()\n",
"\n",
"optimizer_result = optimizer.minimize(fun=cost_function_vqe, x0=initial_theta)\n",
"\n",
"optimal_parameters = optimizer_result.x\n",
"print(optimal_parameters)"
]
},
{
"attachments": {
},
"cell_type": "markdown",
"metadata": {
},
"source": [
"このタイプの最適化の主な欠点は、収束速度が非常に遅くなることと、最適解を達成する保証がないことです。\n",
"\n",
"![theta に対する f(theta) のグラフ。複数の点は、曲線の最小値を見つける勾配降下法アルゴリズムのさまざまな状態を示します。](images/optimization_gradient_descent.png)\n",
"\n",
"### 勾配なし\n",
"\n",
"勾配を必要としない最適化アルゴリズムは、勾配情報を必要としないため、勾配の計算が困難であったり、コストがかかったり、ノイズが多すぎたりする場合に有効です。また、勾配を利用した手法が局所最適値に収束する傾向があるのに対して、大域最適値を見つける上でより頑健である傾向があります。ここでは、勾配なしオプティマイザーが不毛な台地を回避するのに役立ついくつかの例を紹介します。しかし、勾配なし手法は、特に高次元の探索空間を持つ問題に対してより高い計算リソースを必要とします。\n",
"\n",
"ここでは、代わりに [`COBYLA`](https://qiskit.org/documentation/stubs/qiskit.algorithms.optimizers.COBYLA.html#qiskit.algorithms.optimizers.COBYLA) オプティマイザーを使用する例を紹介します:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
},
"outputs": [

],
"source": [
"from qiskit.algorithms.optimizers import COBYLA\n",
"\n",
"initial_theta = np.ones(8)\n",
"optimizer = COBYLA()\n",
"\n",
"optimizer_result = optimizer.minimize(fun=cost_function_vqe, x0=initial_theta)\n",
"\n",
"optimal_parameters = optimizer_result.x\n",
"print(optimal_parameters)"
]
},
{
"attachments": {
},
"cell_type": "markdown",
"metadata": {
"gloss": {
"barren-plateaus": {
"text": "パラメータ化された量子回路の勾配が量子ビット数に対して指数関数的に小さくなると、最適化が難しくなり、最適化計算が不能になる可能性があります。",
"title": "不毛な台地"
}
}
},
"source": [
"## 不毛な台地\n",
"\n",
"実際、コストの起伏は、下の例のように丘と谷のように非常に複雑になることがあります。最適化手法は、黒い点と線で示されるように、コストの起伏をナビゲートし、最小値を探します。3つの探索のうち2つは、グローバルな最小値ではなく、ローカルな最小値で終わっていることがわかります。\n",
"\n",
"![コストの起伏](images/optimization_loss_landscape.png)\n",
"\n",
"最適化手法の種類にかかわらず、コストの起伏が比較的平坦である場合、その手法が適切な探索方向を決定することは困難な場合があります。このようなシナリオは[不毛な台地](gloss:barren-plateaus)と呼ばれ、コストの起伏が徐々に平坦にります(したがって、最小値への方向性を決定するのがより困難になります)。パラメータ化された幅広い量子回路において、合理的な方向に沿った勾配が一定の精度でゼロでない確率は、量子ビットの数が増えるにつれて指数関数的に減少することが分かっています。\n",
"\n",
"![Barren Plateaus](images/optimization_barren_plateaus.png)\n",
"\n",
"この分野はまだ活発な研究が行われていますが、最適化性能を向上させるためのいくつかの推奨事項があります:\n",
"\n",
"- **ブートストラップ** は、最適化ループが勾配が小さいパラメータ空間で立ち往生するのを避けるのに役立ちます。\n",
"- **ハードウェア効率の良いansatzの実験**: ブラックボックスオラクルとしてノイズの多い量子系を使用しているため、その評価の質はオプティマイザーの性能に影響を与えることがあります。[`EfficientSU2`](https://qiskit.org/documentation/stubs/qiskit.circuit.library.EfficientSU2.html) のようなハードウェア効率の良いansatzを使用することで、指数関数的に小さな勾配が発生することを回避できる可能性があります。\n",
"- **エラー抑制とエラー緩和の実験**: Qiskit Runtime Primitiveは、様々な `optimization_level`と `resilience_setting` をそれぞれ実験するためのシンプルなインターフェースを提供します。これにより、ノイズの影響を軽減し、最適化プロセスをより効率的に行うことができます。\n",
"- **勾配なしオプティマイザーを使った実験**: `COBYLA`のようなオプティマイザーは、勾配ベースの最適化アルゴリズムとは異なり、勾配情報に頼らずにパラメータを最適化するため、不毛な台地の影響を受けにくいです。"
]
},
{
"attachments": {
},
"cell_type": "markdown",
"metadata": {
},
"source": [
"このレッスンで、あなたは最適化ループを定義する方法を学びました:\n",
"\n",
"- 最適化ループをブートストラップする。\n",
"- ローカルオプティマイザーとグローバルオプティマイザーを使い分けながら、トレードオフを理解する。\n",
"- 不毛の台地とそれを避ける方法を探る\n",
"\n",
"ハイレベルの変分ワークロードは完了です:\n",
"\n",
"![最適化回路](images/optimization_circuit.png)\n",
"\n",
"次に、このフレームワークを意識して、具体的な変分アルゴリズムを探っていきます。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading