誤差逆伝播法(英: Backpropagation)の解説
ニューラルネットワークは、各接続がそのコンピュータプログラムに関連する重みを有する、接続されたI/Oユニットのグループである。大規模なデータベースから予測モデルを構築するのに役立ちます。このモデルはヒトの神経系に基づいている。イメージ理解、人間学習、コンピュータスピーチなどを行うのに役立ちます。
バックプロパゲーションとは?
バックプロパゲーションはニューラル・ネット・トレーニングの本質です。これは、前のエポック(すなわち、反復)で得られたエラー率に基づいて、ニューラルネットの重みを微調整する方法です。重みを適切に調整することにより、エラー率を低減し、モデルの一般化を向上させることでモデルの信頼性を高めることができます。
バックプロパゲーションは「エラーの後方伝播。」の短縮形で、人工ニューラルネットワークを訓練する標準的な方法です。この方法は,ネットワーク内のすべての重みを考慮して損失関数の勾配を計算するのに役立つ。
このチュートリアルでは、以下について学習します。
入力Xはあらかじめ接続された経路を通って到着する
入力は実ウェイトWを使用してモデリングされます。ウェイトは通常、ランダムに選択されます。
入力層から隠れ層、出力層までのすべてのニューロンの出力を計算します。
出力の誤差を計算する
エラーB=実際の出力–必要な出力
出力レイヤから非表示レイヤに戻り、エラーが減少するようにウェイトを調整します。
目的の出力が得られるまでプロセスを繰り返します。
バックプロパゲーションが必要な理由?
バックプロパゲーションの最も顕著な利点は次のとおりです。
バックプロパゲーションは高速、シンプル、プログラムが容易
入力数以外に調整するパラメータはありません。
ネットワークに関する予備知識を必要としないため、柔軟な方法です。
これは一般的にうまく機能する標準的な方法です。
学習する関数の特徴について特別な記述をする必要はありません。
フィードフォワードネットワークとは?
フィードフォワードニューラルネットワークは,ノードがサイクルを形成しない人工ニューラルネットワークである。この種のニューラルネットワークは入力層,隠れ層,出力層を持つ。これは最初で最も単純なタイプの人工ニューラルネットワークである。
バックプロパゲーションネットワークの種類
バックプロパゲーション・ネットワークには、次の2種類があります。
静的逆伝搬
静的逆伝播:
これは,静的出力に対する静的入力のマッピングを生成する一種の逆伝搬ネットワークである。光学文字認識のような静的分類問題を解決することは有用である。
固定値に達するまで、再帰的な逆伝播が行われます。その後、エラーが計算され、逆方向に伝播されます。
両方法の主な違いは,マッピングが静的逆伝搬では迅速であるが,反復逆伝搬では非静的であることである。
バックプロパゲーションの歴史
1961年には、J.Kelly、Henry Arthur、E.Brysonの制御理論に基づいて、連続逆伝搬の基本概念が導出されました。
1969年にBrysonとHoは多段動的システム最適化法を与えた。
1974年にワーボスは、この原理を人工ニューラルネットワークに応用する可能性を示した。
1982年にHopfieldはニューラルネットワークのアイデアを思いついた。
1986年には、David E.Rumelhart、Geoffrey E.Hinton、Ronald J.Williamsらの努力により、逆伝播が認められた。
1993年、Wan氏はバックプロパガティ氏の協力を得て、国際的なパターン認識コンテストで初めて優勝した。
バックプロパゲーションキーポイント
トレーニングされたネットワークへの影響が最も少ないエレメントのウェイトリンクにより、ネットワーク構造を単純化します。
入力画層と非表示の単位画層の関係を作成するには、入力値とアクティブ化値のグループを調べる必要があります。
入力変数がネットワーク出力に与える影響を評価するのに役立ちます。この分析から得られた知識はルールで表現されるべきである。
バックプロパゲーションは、画像認識や音声認識など、エラーの発生しやすいプロジェクトに取り組むディープニューラルネットワークに特に有効です。
バックプロパゲーションでは、チェーンルールとパワールールを利用して、任意の数の出力でバックプロパゲーションを機能させることができます。
ベスト・プラクティスのバックプロパゲーション
逆伝搬は「シューズレース」のたとえを使って説明できます。
テンションが少なすぎます=
拘束が不十分で、非常に緩い
過度の張力=
拘束が多すぎます(オーバートレーニング)
時間がかかりすぎる(比較的遅い過程)
破損の可能性が高い
他よりも1つだけ引く=
不快感(バイアス)
バックプロパゲーションを使用する場合の欠点
特定の問題に対する逆伝搬の実際のパフォーマンスは、入力データに依存します。
バックプロパゲーションはノイズの多いデータに非常に敏感
バックプロパゲーションには、ミニバッチではなくマトリックスベースのアプローチを使用する必要があります。
あらすじ
ニューラルネットワークは、各接続がそのコンピュータプログラムに関連する重みを有する、接続されたI/Oユニットのグループである。
Backpropagationは「エラーの後方伝播。」の短縮形で、人工ニューラルネットワークを訓練する標準的な手法だ。
バックプロパゲーションは高速、シンプル、プログラムが容易
フィードフォワードニューラルネットワークは人工ニューラルネットワークである。
バックプロパゲーションネットワークには,1) 静的バックプロパゲーション,2) 再帰バックプロパゲーション,の2種類がある。
1961年には、J.Kelly、Henry Arthur、E.Brysonの制御理論に基づいて、連続逆伝搬の基本概念が導出されました。
バックプロパゲーションによってウェイトリンクが削除され、
教師付き機械学習とは
教師付き機械学習とは
教師付き学習の方法
教師あり学習では、適切な「ラベル付き。」データを使用して機械をトレーニングします。これは、一部のデータがすでに正しい答えでタグ付けされていることを意味します。それは、監督者や教師の前で行われる学習に例えることができます。
教師付き学習アルゴリズムは、ラベル付きトレーニングデータから学習し、予期しないデータの結果を予測するのに役立ちます。
正確な教師付き機械学習モデルの構築、スケーリング、および展開を成功させるには、高度なスキルを持つデータサイエンティストのチームから時間と技術的な専門知識が必要です。さらに、データサイエンティストはモデルを再構築して、与えられた洞察がデータが変更されるまで真実であることを確認しなければならない。
たとえば、職場から車で帰宅するまでの時間を予測できるように、マシンをトレーニングしたいとします。ここでは、ラベル付きデータのセットを作成することから始めます。このデータには次のものが含まれます。
気象状況
時刻
休日
これらの詳細はすべて入力です。出力は、その日に家まで車で帰るのにかかった時間です。
外に雨が降っていると、車で帰るのに時間がかかることを直感的に知っています。しかし、その機械にはデータと統計が必要だ。
次に、ユーザーが通勤時間を判断するのに役立つ、この例の教師付き学習モデルを開発する方法を見てみましょう。最初に作成する必要があるのは、トレーニングセットです。このトレーニングセットには、総通勤時間と、天候、時間などの対応する要素が含まれます。このトレーニングセットに基づいて、マシンは、雨の量と帰宅にかかる時間の間に直接的な関係があることを認識する場合があります。
雨が多ければ多いほど、車で帰宅する時間が長くなるのですね。仕事を辞める時間と外出する時間の関係もわかるかもしれません。
午後6時に近ければ近いほど、家に帰るのに時間がかかる。マシンによっては、ラベル付きデータとの関係の一部が検出される場合があります
次に、ユーザーが通勤時間を判断するのに役立つ、この例の教師付き学習モデルを開発する方法を見てみましょう。最初に作成する必要があるのは、トレーニングセットです。このトレーニングセットには、総通勤時間と、天候、時間などの対応する要素が含まれます。このトレーニングセットに基づいて、マシンは、雨の量と帰宅にかかる時間の間に直接的な関係があることを認識する場合があります。
意思決定ツリー
決定木は,特徴量に基づいてインスタンスをソートすることにより,インスタンスを分類する。この方法では、各モードはインスタンスのフィーチャーです。これは分類されるべきであり、すべてのブランチはノードが想定できる値を表します。分類に広く用いられている手法である。この方法では,分類は決定木として知られる木である。
実際の値(自動車購入費、通話回数、月間総売上など。)を見積もるのに役立ちます。
サポートベクトルマシン
サポートベクトルマシン(SVM)は,Vap Nikによって導入された統計的学習理論の結果に基づいて,1990年に開発された学習アルゴリズムの一種である。
SVMマシンは,学習タスクの中心概念であるカーネル機能とも密接に関連している。カーネルフレームワークとSVMは、さまざまな分野で使用されます。マルチメディア情報検索,バイオインフォマティクス,パターン認識を含む。
入力データアルゴリズムはラベル付きデータを用いて訓練される。ラベル付けされていないデータに対してアルゴリズムが使用される
計算複雑性教師付き学習はより簡単な方法である。教師なし学習は計算が複雑です
精度高精度で信頼性の高い方法です。より正確で信頼性の低い方法。
教師付き機械学習の課題
ここでは、教師付き機械学習が直面する課題について説明します。
不適切な入力機能が存在するトレーニングデータは、不正確な結果になる可能性があります。
データの準備と前処理は常に課題です。
訓練データとして、不可能、あり得ない、不完全な値が入力された場合、精度が低下する
関係する専門家がいない場合は、「残忍な力です。」というアプローチもあります。これは、マシンをトレーニングするために適切な機能(入力変数)を考える必要があることを意味します。不正確かもしれません。
教師付き学習の利点:
教師あり学習では、以前の経験からデータを収集したり、データ出力を生成したりできます。
経験に基づいてパフォーマンス基準を最適化
教師付き機械学習は、さまざまな種類の現実世界の計算問題を解決するのに役立ちます。
教師付き学習の短所
クラスで使用したい例がないトレーニングセットの場合は、決定境界線をトレーニングしすぎている可能性があります。
分類子のトレーニング中に、各クラスから多数の適切な例を選択する必要があります。
ビッグデータの分類は非常に難しい。
教師付き学習のための訓練は多くの計算時間を必要とする。
教師付き学習のベストプラクティス
他の作業を行う前に、トレーニングセットとして使用するデータの種類を決定する必要があります。
学習した関数と学習アルゴリズムの構造を決定する必要があります。
人間の専門家または測定からの対応するアウトプットを収集する
あらすじ
教師あり学習では、よく「ラベル付き。」データを使って機械を訓練する。
職場から車で帰宅するまでの時間を予測する機械を訓練したいのは、教師付き学習の一例です。
回帰と分類は2種類の教師付き機械学習技法である。
教師あり学習は単純な方法であるが,教師なし学習は複雑な方法である。
教師付き学習における最大の課題は,不適当な入力特徴が存在する訓練データが不正確な結果を与える可能性があることである。
教師付き学習の主な利点は、データを収集したり、以前の経験からデータ出力を生成できることです。
このモデルの欠点は、トレーニングセットにクラスで使用したい例がない場合、決定境界線が過度に緊張する可能性があることです。
学習を管理するためのベストプラクティスとして、まず、トレーニングセットとして使用するデータの種類を決定する必要があります。
ディープラーニング VS 機械学習
AIとは?
人工知能は機械に目の認識能力をもたらすものだ。
その進化は思考したり、会話したり、画像を使ったりする。
この成果は遠い未来ではない。
AIには3つのレベルがある。
狭義のAI: 特定のタスクを人間よりもうまくこなすもの。現在の研究はここ。
汎用のAI: 人間の知性の再現。
超AI: 人間を打ち負かすAI
黎明期のAIはパターンマッチングやルールベースのエキスパートシステムだった。
機械学習とは?
機械学習はこれまでのところ、データ中のパターンを分析し、理解し、識別するための最良のツールである。機械学習の背後にある主要なアイデアの1つは、人間にとっては完全であるか不可能であるタスクを自動化するようにコンピュータを訓練できるということである。従来の分析から明らかに逸脱しているのは、機械学習は人間の介入を最小限に抑えて意思決定を行うことができるという点である。
機械学習では、データを使用して、入力と出力の関係を理解できるアルゴリズムを提供します。機械が学習を終えると,新しいデータ点の値またはクラスを予測できる。
ディープ・ラーニングとは?
ディープ・ラーニングは、脳内のニューロンのネットワークを模倣するコンピューター・ソフトウェアだ。これは機械学習のサブセットであり、ディープニューラルネットワークを利用することからディープラーニングと呼ばれる。マシンは、データから学習するために異なるレイヤーを使用します。モデルの深さは、モデル内のレイヤーの数によって表されます。ディープラーニングは、人工知能の分野における最新技術であり、ディープラーニングにおいては、ニューラルネットワークを介して学習フェーズが行われる。ニューラルネットワークは、層が互いに積み重ねられるアーキテクチャである。
機械学習のプロセス
オブジェクトを認識するプログラムを作成しようとしているとします。モデルをトレーニングするには、分類子を使用します。分類子は、オブジェクトの機能を使用して、そのオブジェクトが属するクラスを識別しようとします。
この例では、分類器は、画像が次のものであるかどうかを検出するように訓練される。
自転車
ボート
車
平面
上記の4つのオブジェクトは、分類子が認識する必要があるクラスです。分類子を構築するには、データを入力として持ち、ラベルを割り当てる必要があります。アルゴリズムはこれらのデータを取得し、パターンを見つけて、対応するクラスに分類します。
このタスクは、教師付き学習と呼ばれます。教師あり学習では、アルゴリズムに渡すトレーニング・データにラベルが含まれます。
アルゴリズムをトレーニングするには、いくつかの標準的な手順に従う必要があります。
データの収集
分級機を訓練する
予測を行う
最初のステップは必要であり、適切なデータを選択することでアルゴリズムが成功するか失敗するかが決まります。モデルをトレーニングするために選択するデータは、フィーチャと呼ばれます。オブジェクトの例では、フィーチャはイメージのピクセルです。
各イメージはデータの行で、各ピクセルは列です。イメージのサイズが28x28の場合、データセットには784列(28x28インチ)が含まれます。下の図では、各ピクチャはフィーチャベクトルに変換されています。ラベルは、イメージにどのオブジェクトが含まれているかをコンピュータに伝えます。
目的は,これらの訓練データを用いて対象のタイプを分類することである。最初の手順では、フィーチャ列を作成します。次に、モデルをトレーニングするアルゴリズムを選択します。訓練が行われると,モデルはどの絵がどの物体に対応するかを予測する。
その後,モデルを用いて新しい画像を予測することは容易である。新しいイメージがモデルに入力されるたびに、マシンはそれが属するクラスを予測します。たとえば、ラベルのないまったく新しいイメージがモデルを通過しているとします。人間にとって、車のイメージを描くのは簡単です。その機械は、画像が車であることを予測するために、その以前の知識を使用する。
ディープ・ラーニングのプロセス
深層学習では,学習フェーズはニューラルネットワークを介して行われる。ニューラルネットワークは、層が互いに積み重ねられるアーキテクチャである。
上と同じ画像の例を考えてみましょう。訓練セットは神経回路網に送られ
各入力はニューロンに入り、重みが掛けられます。乗算の結果は次のレイヤに流れ、入力になります。このプロセスは、ネットワークの各層について繰り返される。最後のレイヤには出力レイヤという名前が付けられます。;回帰タスクの実際の値と、分類タスクの各クラスの確率が提供されます。ニューラルネットワークは数学的アルゴリズムを用いて全ニューロンの重みを更新する。重みの値が現実に近い出力を与えるとき,ニューラルネットワークは完全に訓練される。例えば,十分に訓練されたニューラルネットワークは,従来のニューラルネットワークよりも高い精度で画像上の物体を認識できる。
ディープ・ラーニングを使った自動特徴抽出
データセットには、10~数百のフィーチャを含めることができます。システムは、これらの機能の関連性から学習します。ただし、すべての機能がアルゴリズムにとって意味があるわけではありません。機械学習の重要な部分は、システムに何かを学習させるための一連の関連する機能を見つけることである。
機械学習でこの部分を実行する1つの方法は、特徴抽出を使用することである。フィーチャ抽出は、既存のフィーチャを組み合わせて、より関連性の高いフィーチャセットを作成します。これは、PCA、T-SNE、または他の次元縮小アルゴリズムを用いて行うことができる。
例えば、画像処理では、開業医は、目、鼻、唇などの画像中の特徴を手動で抽出する必要がある。抽出された特徴は分類モデルに供給される。
ディープ・ラーニングは、特に畳み込みニューラルネットワークにおいて、この問題を解決する。ニューラルネットワークの第1層は、画像から細部を学習する。;次のレイヤーでは、これまでの知識を組み合わせて、より複雑な情報を作成します。畳み込みニューラルネットワークでは,フィルタを用いて特徴抽出を行う。ネットワークは、一致があるかどうか、すなわち、特徴の形状が画像の一部と同一であるかどうかを見るために、画像にフィルタを適用する。一致する場合、ネットワークはこのフィルタを使用します。したがって、特徴抽出のプロセスは自動的に行われる。
どんなときに機械学習かディープ・ラーニングを使うのか
機械学習では、ディープ・ラーニングよりも少ないデータでアルゴリズムをトレーニングできます。深層学習では、基礎となる構造を識別するために、広範で多様なデータセットが必要です。さらに、機械学習はより速く訓練されたモデルを提供する。最先端のディープラーニングのアーキテクチャでは、トレーニングに数日から1週間かかることがあります。ディープラーニングが機械学習より優れている点は、精度が高いことです。どのフィーチャがデータの最適な表現であるかを理解する必要はありません。;重要な特徴の選び方を学習しました。機械学習では、モデルに含める機能を自分で選択する必要があります。
翻訳作業はやっぱり勉強になるなぁ。
自動識別処理の急速な発展について
私は長年、画像理解の壮大な挑戦に興奮してきました。画像理解の定義はコンピュータビジョンの研究者と同じくらいたくさんありますが、人間だけでなく画像の説明文も自動的に生成できるシステムができれば、目標は達成できたと思います。
今年の夏、米マイクロソフト・リサーチ社の約12人のインターンと研究者が、「やってみる」と、自動画像キャプション・ソフトウェア・システムを開発することに決めた。物体の分類と検出のためのディープラーニングにおけるすべての進歩を考慮して,信頼できるシステムを構築する時が来たと考えた。次に、システムからの出力例を示します。どのキャプションが個人によって生成され、どのキャプションがシステムによって生成されたと思いますか?
プロジェクト自体は驚くほど楽しかった。;私たちの多くにとって、ここ数年で仕事をしてきた中で一番楽しかった。チームは、コンピュータビジョン、自然言語、音声、機械翻訳、機械学習の専門知識を持つ研究者を含む複数の専門分野に分かれていた。
このプロジェクトはすばらしいものだっただけでなく、プレプリントされた結果を誇りに思う。キャプションシステムは、ピクセルから(例。)英語まで、機械翻訳システムと考えることができます。機械翻訳の専門家は、BLEUメトリックを使用して、システムの出力を人間の翻訳と比較します。BLEUはキャプションを長さのチャンク(1~4語)に分割し、システムと人間の翻訳の間の重なりの量を測定します。また、短いシステムキャプションにもペナルティが適用されます。
達成可能な最高BLEUスコアを理解するために,著者らは一つの手書きキャプション(仮定の「システム」として)対他の四つを試験した。BLEUスコアに関して言えば、私たちは実際に人間を打ち負かしているのです!著者らのシステムは21.05%のBLEUスコアを達成したが,ヒト「システム」は19.32%のスコアであった。
さて、この超人的なBLEUスコアを巨大な塩の固まりと一緒に取るべきです。BLEUには、機械翻訳コミュニティでよく知られている多くの制限があります。また、METEORメトリックを使用してテストしてみましたが、人間のパフォーマンスをやや下回っています(20.71%対24.07%)。
本当のゴールドスタンダードは、ブラインドテストを行い、どのキャプションが良いかを人々に尋ねることです(先ほどの質問のように)。AmazonのMechanical Turkを使って、キャプションのペアを比較してもらった。テスト画像の23.3%では、システムキャプションは人間のキャプションと同じかそれ以上だと考えられていた。
チームはその結果にかなり興奮している。人間のイメージ理解のレベルに近づくことさえ、非常に難しい問題です。難しい例を以下に示します。
第一に、システムは、画像を、物体である可能性が高い多数の領域に分割する(エッジに基づく)。次に,ディープニューラルネットワークを各領域に適用し,関連する視覚情報を捕捉する高レベル特徴ベクトルを生成する。次に,その特徴ベクトルをニューラルネットワークへの入力とし,関連するキャプションに現れる単語を生成するように訓練する。このトレーニングでは、各領域に各単語を手動で割り当てることはありません。;代わりに、(「複数インスタンスの学習」です)というトリックを使って、それぞれの単語に最も合う領域をニューラルネットワークに割り出させます。
その結果、特定の順序ではなく、イメージ内で検出される単語のバッグが生成されます。どの地域でどの単語が検出されたかを調べるのは興味深い。
次に、言語モデルを使用して、単語を意味のある文にまとめます。言語モデルについて聞いたことがあるかもしれません:彼らはテキストのトレーニングコーパス(シェイクスピアは)を取り、そのコーパス(例えば、新しい偽シェークスピア)を「次のように聞こえます。」新しいテキストを生成します。私たちがしているのは、新しいキャプションを作るために、キャプション言語モデルを訓練することです。画像から検出された単語の「黒板」を作成することによって、言語モデルに「ステアリングホイール」を追加します。言語モデルはこれらの単語を生成するように奨励されており、そうすることで「黒板」からそれぞれの単語を消去します。これにより、システムは同じ単語を何度も繰り返すことができなくなります(マルコヴィッチ問題と呼んでいます)。
単語検出器と言語モデルは両方とも局所的であり、それぞれの単語を生成するために画像の1つのセグメントだけを見て、生成するために一度に1つの単語だけを考慮することを意味する。画像に対するキャプションの全体的な意味や適切さの感覚がない。これを解決するために,著者らは,どのキャプションがどの画像に最も適しているかを知るために,ディープラーニングを用いて類似性モデルを作成した。この類似性モデル(文全体の特徴や)を用いて再ランクし,最終的な回答を生成する。
もちろん、これはシステムの概要説明です。詳細については、プリプリントを参照してください。
多くの研究活動
あるアイデアが「空中で」で、同時に複数のグループによって発明されることもあります。確かに、画像キャプションについてはそうだ。2014年以前には、ディープラーニングを利用しない自動イメージキャプションシステムに対する以前の試みがあった。たとえば、MidgeやBabyTalkなどです。私たちは確かにこれらの以前のシステムの経験から利益を得た。
Baidu/UCLA: http://arxiv.org/pdf/1410.1090v1.pdf
Berkeley: http://arxiv.org/abs/1411.4389
Google: http://googleresearch.blogspot.com/2014/11/a-picture-is-worth-thousand-coherent.html
Stanford: http://cs.stanford.edu/people/karpathy/deepimagesent/
University of Toronto: http://arxiv.org/pdf/1411.2539v1.pdf
今年は、ディープラーニングに基づくイメージキャプションシステムがカンブリアで爆発的に普及した。まるで多くのグループがCVPR2015会議(11月14日金曜日を納期とする)に論文を提出することを目指しているかのようです。私が知っている論文 (Andrej Karpathyと私の共著者から)
このような全体的な進歩は目を見張るものがある。イメージキャプショニングは魅力的で重要な問題であり、私はこれらのアプローチの長所と短所をよりよく理解したい。(リカレントニューラルネットワークやLSTMモデルを使った人もいた。)。フィールドとして、標準化されたテストセット(COCOなど)と標準的な測定基準に合意できれば、私たちはその目標に向かって前進を続け、人間だけでなく画像の記述的キャプションを自動的に生成できるシステムを作ります。この夏の作業と他の作業の結果は、私たちが正しい方向に進んでいることを示しています。
Rapid Progress in Automatic Image Captioning | Machine Learning Blog
ドラッカー徹底解説
P.F.ドラッカーはいつも時代の案内人であった。
P.F.ドラッカーをご存知だろうか。
経営学の始祖、マネジメントの発明者、経営コンサルタントのパイオニア、野球部のマネージャーの愛読書、などが一般的な印象だろう。
本当の彼は、未来の社会が求めるものを10年早く示し、必須となる発明を提供した。
最大のものが「マネジメント」である。
ドラッカーは、自己啓発でも、金儲けのスキルでも、言葉遊びの学問でもない。
時代の案内人であった。
歴史
ドラッカーを知るには、抽象的な概念や実績、著名人の評価を見せてアレコレ小難しく語る気はない。
この記事は商売ではないからだ。
その人を知るには、その人の人生を見れば良い。
少年期(1909年〜
オースラリアに
青年期
対ファシズム期(30歳。1939年〜)
『経済人の終わり(The End of Economic Man)』
ドラッカーはナチス政権による全体主義がドイツを覆って行く中で、処女作『経済人の終わり(The End of Economic Man)』を発刊した。
ファシズムの原因と対抗策を明らかにした。
企業探検期(37歳。1946年〜)
社会の軍師期(60歳。1969年〜)
未来へ(90歳。1999年〜)
iframeを使ってクロスドメインでCookieを書き込む[iframe][sso]
iframeを使うことでドメインをまたいでクッキーを書き込む方法です
これはサードパーティクッキーと呼ばれているものです。
例えて言えば、parent.com にアクセスしただけで、外部ドメイン child.com のクッキーをセットしてしまうという黒魔術です。
完全なクロスドメインのSSO(シングルサインオン)を実現するために研究しました。
参考にしたのはGoogleのSSOです。
Googleは一度ログインすると、google.comだけでなく、youtube.com, google.co.jpも別のドメインであるにも関わらず全てログインしておいてくれます。
これをGoogleは、ユーザがログインすると https://accounts.google.com/CheckCookie に一度リダイレクトさせることで実現しています。
このページを反射神経でCtrl+Uソースを表示して参考にしました。
参考URL: view-source:https://accounts.google.com/CheckCookie?continue=http%3A%2F%2Fwww.google.co.jp%2F&hl=ja&chtml=LoginDoneHtml&dnConn=https%3A%2F%2Faccounts.youtube.com&pstMsg=1
ダメだった方法
1, 親htmlの中に作った子iframeの中でXMLHTTPRequestを使ってcookie.phpにAjax通信してCookieをセット
2, 親htmlの中に作った子iframeの中の孫iframeの中でXMLHTTPRequestを使ってcookie.phpにAjax通信してCookieをセット
<?php $name = "test"; $value = "valuetest"; header("P3P: CP='UNI CUR OUR'"); //IEのP3Pルール対策 setcookie($name, $value); var_dump($_COOKIE); ?>
groundchild.htmlのjs文
var xhr = new XMLHttpRequest(); xhr.open('GET', "http://***.***/cookie.php", true); xhr.onreadystatechange = function(){ alert("success"); }; var result = xhr.send(null);
成功した方法
3, 親htmlの中に作った子iframeの中でCookieをjavascriptでセット
4, 親htmlの中に作った子iframeの中の孫iframeの中でCookieをjavascriptでセット
<html> <head> <script> document.cookie = "sampleName=sampleValue"; </script> </head> </html>
これが一番おすすめです。
5, 親htmlの中に作った子iframeの中にフォームを作ってHTTPリクエストをcookie.phpになげる
6, 親htmlの中に作った子iframeの中の孫iframeの中にフォームを作ってHTTPリクエストをcookie.phpになげる
groundChild.html
<form id="cookieform" method="POST" action="http://example.com/cookie.php"> </form> <script type="text/javascript"> document.getElementById("cookieform").submit(); </script>
非常に参考にした書籍たち。作者様ありがとうございました。
- 作者: 徳丸浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2011/03/01
- メディア: 単行本
- 購入: 119人 クリック: 4,283回
- この商品を含むブログ (146件) を見る
- 作者: ウェド・アルコーン,クリスチャン・フライコット,ミシェル・オーラ
- 出版社/メーカー: 翔泳社
- 発売日: 2016/03/15
- メディア: Kindle版
- この商品を含むブログを見る
HTML5 Hacks ―インタラクティブWebアプリケーションのためのテクニック
- 作者: Jesse Cravens,Jeff Burtoft,大岩尚宏(技術監修),出葉義治
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/10/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る