質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.43%

  • Python

    9774questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    7909questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • 機械学習

    799questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • TensorFlow

    798questions

  • 深層学習

    169questions

多層パーセプトロンとdeep learning ネットワークとの違い?

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 127

OOZAWA

score 3

多層パーセプトロンとディープビリーフネットワークとの違いはなんでしょうか。

下記HPでは少し触れましたが、概念的に理解できない処があります。
http://yaju3d.hatenablog.jp/entry/2017/05/31/235745
==========引用==========
従来のニューラルネットワーク(左図)はパラメーターの更新を4層以上一度にやっていたが、ディープビリーフネットワーク(右図)では層毎に学習が完了してから次の層を付け足したことにある。1層が終わってから2層目と順に学習し、全ての学習が終わってから全層を結合してバックプロパゲーションをかけたのである。
========引用END=========

これによりますと、ディープビリーフネットワークの『パラメーターの学習』と『パラメーターの更新』とは別々の意味で、『パラメーターの学習』はforward的に行い、『パラメーターの更新』は従来のback propagationだそうです。

それじゃー、どうやって『パラメーターの学習』が実施されるのでしょうか。

つまり、自分の認識では
「パラメーターの学習 = パラメーターの更新 = back propagation」
back propagationなしのforward的な『パラメーターの学習』は具体的にどうやって実現されるのでしょうか。

ご存知の方宜しくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

回答がつかないみたいなので。

ディープビリーフネットワークの『パラメーターの学習』と『パラメーターの更新』とは別々の意味で、

これはたぶん勘違いで、[Hinton+06]をざっと読むと、6章までがモデルをどのように構築するかの話をしていてここまではlearningという言葉だけがでていてtrainingという言葉がでてきません。
7章で実際MNISTに適用してみた、という話が始まってここからtrainingという言葉がでてきます。

理論の話をしているところでlearning(学習)、実装してMNISTデータセットで重みを獲得するところでtraining(訓練)と使い分けているだけなのでは? というのが数分ほど論文を眺めた印象です。


中間層の学習をどうやってるのか? というのはちゃんと論文を読んで数式も追わないと詳しいことはわかりませんが

  • 近似的な分布を導入して第1層を学習する(=どうやってか決めた近似分布を出力するように重みを更新する)
  • 1層目の学習を打ち切って1層目の重みを固定する。2層目が出力する近似分布を導入して2層目を学習する
  • 2層目の学習を打ち切って1層目と2層目の重みを固定する。3層目が出力する近似分布を導入して3層目を学習する
  • 全層を結合してデータを投入してバックプロパゲーションによって全層の重みを更新(ファインチューニング)する

という手順かと思います。というかそう理解しています。

途中の層が出す近似的な分布をどう決めたのかは[Hinton+06]を読みこむか、しっかり数式を出している解説を読んで数式の意味を理解するかしないといけないでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/15 16:02

    素晴らしい解説有難うございます。
    最初、タイトルに「ディープビリーフネットワーク」を入れましたが、
    それはdeep learning の代表的な意味で使ったんで、本質的に「deep learningのトレーニング方法と多層パーセプトロンのそれと何が違うか」という質問にしたいのです。
    因みに、この分野では通常「learning」=「training」と思います。
    trainingはlearningのためですので、等価的になります。

    キャンセル

  • 2019/01/15 16:25

    大きい発展は、Adamのような最適化の発展と、Batch Normalization(が可能になるメモリ容量)かなーと思いますけど、結局はバックプロパゲーションですよね。そこは変わりないかと思います。learningとtrainingは無理に使い分ける必要はないと私も思います。

    キャンセル

  • 2019/01/15 17:04

    早速お返答ありがとうございます。
    『Batch Normalization』ですか。これで、深層による誤差の逆向伝搬が消失や発散することは緩和されるのでしょうか。
    (自分の感覚ではそうではないようです。たかが「ある程度」?)

    キャンセル

  • 2019/01/15 17:28

    NIPS2018 の論文 Understanding Batch Normalization (を日本語で解説した記事など)を読むのがいいかと思います。

    キャンセル

  • 2019/01/15 17:32 編集

    Batch Normalizationのオリジナル論文は2015です。この瞬間にも更新され続けている、現在進行形の分野であることを忘れないでください。「何が違うか」という質問に**本当の意味で**答えられる人はいませんよ。(1988年の時点でCNNの可能性を知る人がいなかったように)

    キャンセル

  • 2019/01/15 18:35 編集

    貴重なアドバイス有難うございます。
    【NIPS2018 の論文 Understanding Batch Normalization】の実験によりますと、BNを利用する場合、
    ① 学習レートを大きくしても発散しない;
    ② 収束に達するために所要のepoch数が少なくなる;
    ③ 学習精度が上がる
    確かに多層NNには有利な方法ですね。

    でも、Batch Normalizationは比較的に近年(2015年)の事で、2012年からか、deep learning はすでに層数の大きさによって誤差発散や消失問題を解決されたのではと思います。
    「プリトレーニング」とか利用されていたのですね。
    その後「プリトレーニング」もやめたけれども、『段階的なトレーニング法』が利用することになったと思います。
    まさに質問の窓に貼ったリンク:http://yaju3d.hatenablog.jp/entry/2017/05/31/235745
    はの『段階的なトレーニング法』に関する解釈かなと思います。
    ところが、その解釈は非常に不明瞭ーーー書かれた方はもしかして専門家でもないか?

    キャンセル

  • 2019/01/16 00:32

    「プリトレーニング」と「段階的なトレーニング」はたぶん同じで、2006年前後ですね。
    AdaGradやDropoutがでてきて、重みの初期値をどうしたらいいかみたいな議論がでてきて、大きなデータセットが整備されて、大規模クラスタ(CPU)が使えるようになってディープなCNNがうまくいったのが2011年前後。Deep Learningという言葉ができた。このころには「プリトレーニングは実は要らないみたい」となっていた。
    2015年ぐらいでadamやBatch Normalizationがでてきて「重みの初期値にあまり気をつかわなくて大丈夫みたい」ということがわかってきて、今に至る。
    と。
    CNNにせよバックプロパゲーションにせよ道具立ては1980年代には全部そろっていて、それ以降の歴史は、多層ニューラルネットをバックプロパゲーションで学習させる時に、勾配消失/爆発をどうやって防ぐか? というのが常にテーマになっていた。
    というような認識ですねー。

    キャンセル

+2

私自身の実装経験はなく、研修(勉強会)の知識ベースなので若干不確かですがコメントします。

<ディープビリーフネットワーク考案の背景>
ニューラルネットワークは、単層構造から多層構造へと研究が進みより複雑な課題を高精度で予測できるようになりました。一方、こうした方向性と異なり、層を深くすることなく、入力層から有用な特徴量を抽出する工夫をする方法も研究されました。ディープビリーフネットワークは、後者の方向の研究の成果にあたります。

<ディープビリーフネットワークのコンセプト>
ディープビリーフネットワークは、パーセプトロンで明示的に定義するノード(例えば、入力層と隠れ層)の間に制限付きボルツマンマシンを複数層化したものを導入したものです。制限付きボルツマンマシンとは教師なし学習に属するもので、識別モデルとは別物です。つまり、本来的に教師あり学習であるパーセプトロンの学習に必要な特徴量を教師なし学習を用いて生成した特徴量を用いようというものです。(この制限付きボルツマンマシンを多層化するとディープビリーフネットワークになります)

<制限付きボルツマンマシンの学習プロセス>
制限付きボルツマンマシンの学習プロセスは、オードエンコーダと似ていて、1)下位の層(例えば入力層)から上位の層(例えば隠れ層)へ向かって現在のパラメータを使って計算、2)先で計算した上位の層を入力に下位層を計算し、パラメータの精度を評価、3)評価結果をもとにパラメータ更新、というイメージで行われます。したがって、この段階の学習にはモデル全体における教師データは必要とされず、入力層と隠れ層との間の学習はそれ単独で進められることになります。実際の計算には、ベイズ推論などで用いられるサンプリングが用いられているようで、これもパーセプトロンとは異なる部分と言えるかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.43%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    9774questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    7909questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • 機械学習

    799questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • TensorFlow

    798questions

  • 深層学習

    169questions