深層学習ことはじめ その4

これから数回にわたって深層学習についての記事を書きます.ひとまとめに長文としたものを数回に分けて紹介していきます.初学者向けです,何かの参考になれば.

******

生物学的アナロジー
前の章で、人工ニューラルネットワークが脳と物理的にどのように似ているかについて説明しましたが、学習やその他の「高レベル」の属性に関してはどうですか。興奮性しきい値ロジスティック単位の出力は0から1の間でなければなりません。分類器では、予測するクラスを選択する必要があります.たとえば、1枚の写真を見て猫または犬かを判定する,の問題を考えてみましょう.出力が1ならば  cat,0ならば dogと判定するものとします.そして、出力が0.7だったら、我々はどちらの答えを出しますか?ネコ!どうして?私たちのモデルは、「これが猫のイメージである確率は70%である」と言っているからです。 50%の閾値は、ニューロンの「興奮性閾値」、すなわち活動電位が生成される閾値として作用する。興奮性および抑制性の結合ニューロンは他のニューロンにシグナルを送るときに「興奮性」または「抑制性」シグナルを送る能力を持っています。ご想像のとおり、興奮性結合は活動電位を生み出し、抑制性結合は活動電位を抑制します。これらはロジスティック回帰ユニットの重みのようなものです。非常に積極的な体重は非常に興奮的な接続になります。非常に負の重みは非常に抑制的な関係になるでしょう。
繰り返しと親しみやすさ
「練習は成功の母」と人々はよく言います。何度も何度も練習すると、上達します。ニューラルネットワークも同じです。同じまたは類似の例についてニューラルネットワークを何度もトレーニングすると、それらの例を分類するのに役立ちます。あなたの心は、タスクを実践することによって、その特定のタスクに対するその内部エラー曲線を下げることです。バックプロパゲーション、ニューラルネットワークのトレーニングアルゴリズムについて説明すると、これがコードでどのように実装されているかがわかります。基本的に私たちがやろうとしていることは何度も何度もfor-loopを行い、同じサンプルを何度も見て、毎回それらに対してバックプロパゲーションをすることです。
ニューラルネットワークから出力を取得する
使用するデータを取得する使用するデータがまだない場合は、この記事の例を実行するために必要なデータがいくつかあります。 https://kaggle.comはこれのための素晴らしいリソースです。 MNISTデータセット(https://kaggle.com/c/digit-recognizer)をお勧めします。バイナリ分類をしたい場合は、別のデータセットを選択するか、MNISTから2つのクラス(たとえば0と1)を選択することができます。機械学習の問題に使用するデータは、多くの場合同じ形式です。いくつかの入力XといくつかのラベルまたはターゲットYがあります。各サンプル(xとyのペア)はxの実数のベクトルとyのカテゴリカル変数(多くの場合0、1、2、…)として表されます。すべてのサンプル入力をまとめて行列Xを形成します。各入力ベクトルは行です。つまり、各列は異なる入力機能です。したがって、XはN x Dの行列で、Nはサンプル数、Dは各入力の次元数です。 MNISTの場合、D = 784 = 28 x 28です。これは、28 x 28行列である元の画像が1 x 784ベクトルに「平坦化」されているためです。 yがバイナリ変数(0または1)ではない場合、それをインジケータ変数の行列に変換できます。これは、後でsoftmaxを実行するときに必要になります。 MNISTの例では、Yをインディケータ行列(0と1の行列)に変換します。ここで、Y_indicatorはN x Kの行列です。ここでもN =サンプル数、K =出力のクラス数です。 MNISTの場合はもちろんK = 10です。

深層学習ことはじめ その3

これから数回にわたって深層学習についての記事を書きます.ひとまとめに長文としたものを数回に分けて紹介していきます.初学者向けです,何かの参考になれば.前回の記事を読んでいない方は先にそちらを見てください.

******

ニューロンが「オン」または「オフ」,これはあなたに何を思い出させますか?あなたが「デジタルコンピュータ」と言ったなら、あなたは正しいでしょう!具体的には、ニューロンは、はい/いいえ、真/偽、0/1タイプの問題に対する完全なモデルです。これを「バイナリ分類」と呼び、機械学習のアナロジーは「ロジスティック回帰」アルゴリズムとなります。それはあなたが他のニューロンの出力または他の何らかの入力信号(すなわちあなたの目の視覚受容体またはあなたの指先の機械的受容体)として想像することができる入力x1、x2、およびx3として受け取り、そしてこの出力ニューロンに対するこれらの入力ニューロンの強度によって重み付けされた、これらの入力の組み合わせ。実際には実際の数と式を扱う必要があるので、xからyを計算する方法を見てみましょう。

 y = sigmoid(w1 * x1 + w2 * x2 + w3 * x3)
この項では、バイアス項は無視されます。これは、次の次元に常に等しい次の次元x0を追加することによって簡単に与えられるためです。 各入力ニューロンは、対応する重み(シナプス強度)で乗算され、他のすべてのニューロンに追加されます。次に、その上に「シグモイド」関数を適用して、出力yを求めます。シグモイドは次のように定義されます。
sigmoid(x)= 1 /(1 + exp(-x))
シグモイドの出力は常に0から1の間であることがわかります。2つの漸近線があるため、入力が+∞の場合、出力は正確に1になり、入力が -∞の場合、出力は正確に0になります。入力が0の場合、出力は0.5です。出力は確率として解釈できます。特に、それを確率として解釈します。
P(Y = 1 | X)
これは、「YがXに対して1になる確率」と読むことができます。私たちは通常これと「y」それ自身を交換可能に使うだけです。どちらもニューロンの「出力」です。ロジスティック回帰(ニューロン)はこの記事の前提条件なので、覚えておいてください。あなたはすでにこれらすべてに精通していると思います。ニューラルネットワークを得るためには、単純にニューロンを結合します。我々が人工ニューラルネットワークでこれを行う方法は非常に具体的です。フィードフォワード方式でそれらを接続します。 その入力は(x 1、x 2)であり、その出力はz 1です。我々はzの層を「隠れ層」と呼ぶ。ニューラルネットワークには1つ以上の隠れ層があります。より隠れた層を持つニューラルネットワークは「より深い」と呼ばれるでしょう。 「ディープラーニング」はちょっとした流行語です。私はこの話題についてグーグルで話しました、そして一般的なコンセンサスは1つ以上の隠れ層を持つニューラルネットワークは「深い」と考えられるということです。

エッジ検出アルゴリズムStructuredForestsの適用

RandomForestsによるエッジ検出アルゴリズムStructuredForestsの適用方法です.Gitからコード一式を落としてくるところまではOK,それ以降のデータセットの入手と環境構築で詰まったので解決のメモを残します.

*****

環境
  • ubuntu 16.04LTS
  • python2.7系のvirtualenv環境を作成済み
手順
  • cd StructuredForests
  • vim StructuredForests.py
    • コード末尾の”toy”とある箇所(2か所)を”BSR”に変更
    • n_pos, n_negのデフォルト値10000をそれぞれ500000にする.
  • pip install tables opencv-python scipy scikit-image scikit-learn cython
  • mv model model.old #学習済みモデルを退避
  • git clone https://github.com/BIDS/BSDS500 #BSDS500の公式サイトが不調でダウンロードできない.githubに複製してくれている神リポジトリから取得する.
  • mv BSDS500 BSR
  • python StructuredForests.py
結果確認

edgeフォルダにエッジ抽出結果が保存されている.

深層学習ことはじめ その2

これから数回にわたって深層学習についての記事を書きます.ひとまとめに長文としたものを数回に分けて紹介していきます.初学者向けです,何かの参考になれば.前回の記事を読んでいない方は先にそちらを見てください.

******

*前提条件を読んでください
ディープラーニングには大学レベルの計算と線形代数が必要であることに多くの人が驚きます。 はい、「数学」と言って、足し算と引き算を意味するのではありません。まずは無料の計算式MOOCを見つけ、完了したら戻ってきてください。明確にするために、この記事はあなたがすでにロジスティック回帰を知っていることと、それをNumpyとPythonを使ってコーディングする方法を知っていることを前提としています。繰り返しますが、これに対する反応は「なぜ本にロジスティック回帰を含めなかったのでしょうか」ということです。よくあることですが、線形回帰はロジスティック回帰の前提条件です。明らかに、この質問に終わりはありません。この記事ではPythonのforループとifステートメントについては説明しません。それらについて知らないからといってよいでしょう。
*練習が必要です
あまりにも説得力があるように聞こえないようにしてください、しかし、あなたがいくら読んでも、あなたは練習なしでは良くなりません。コードを何も書かずにいくつかのコースビデオを見た後、人々はなぜ彼らが専門家ではないのか疑問に思います。あなたはYouTubeを見ることから戦う方法を学びますか?もちろん違います!あなたはけがをすることになります。オンラインでボディビルディングのテクニックについて読むことはあなたの体格を向上させるのですか?もちろん違います!あなたは実際にジムに行く必要があります。あなたの数学の先生があなたに同じ問題についての何百ものバリエーションを割り当てていた理由があります。それは練習が完璧になるからです。すべてを読んだだけでは、ディープラーニングについて話し合ったときに自分が話していることを知っているように思えるかもしれませんが、端末で数時間だけで直感が教えられます。
ニューラルネットワークとは
歴史のある時点で、コンピュータ科学者がコンピュータコードで脳をモデル化しようとしていたので、ニューラルネットワークはそのように呼ばれます。最終的な目標は、「人工の一般的な情報」を作成することです。これは、私にとっては、あなたや私が学ぶことができるすべてを学ぶことができるプログラムを意味します。私たちはまだそこにいないので、人類を引き継ぐ機械について怖がる必要はありません。
現在、ニューラルネットワークは、画像や音声の分類などの特異なタスクを実行するのに非常に優れています。脳とは異なり、これらの人工ニューラルネットワークは非常に厳密な定義済み構造を持っています。脳は、電気的および化学的な信号を介して互いに交信するニューロンで構成されています(したがって、ニューラルネットワークという用語)。人工ニューラルネットワークではこれら2種類の信号を区別していないので、これからは「a」信号があるニューロンから別のニューロンに渡されていると言います。シグナルは、「活動電位」と呼ばれるものを介して、あるニューロンから別のニューロンに渡されます。それはニューロンの細胞膜に沿った電気の急上昇です。活動電位についての興味深いことは、それらが起こるか、またはしないかのどちらかです。 「間に」はありません。これは「全か無か」の原則と呼ばれます。ニューロン間のこれらの関係には長所があります。カナダの神経心理学者Donald Hebbに起因する「一緒に発火するニューロン、一緒につながるニューロン」というフレーズを聞いたことがあるかもしれません。強い関連性を持つニューロンは互いに「オン」になります。したがって、あるニューロンが別のニューロンに信号(活動電位)を送り、それらの結合が強い場合、次のニューロンも活動電位を持ち、他のニューロンに引き継がれる可能性があります。 1つのニューロンが別のニューロンに信号を送信すると、2番目のニューロンの電位がわずかに上昇する可能性がありますが、別の活動電位を発生させるのに十分ではありません。したがって、ニューロンが「オン」または「オフ」であると考えることができます。 (すなわち、それは行動の可能性を持っている、またはそれはしません)

celebAデータセットのダウンロード

celebAの公式ダウンロードサイト(http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html)からデータをダウンロードできない.Dropboxの通信料制限が問題になっている模様.
そこでgithubにUpされている別リポジトリのコードを使って,celebAのダウンロードを行う.

@Ubuntu16
apt-get install git
sudo pip install requests
git clone https://github.com/carpedm20/DCGAN-tensorflow
cd DCGAN-tensorflow
python download.sh celebA

⇒ data/img_align_celeba.zip にcelebAが保存される.

============================

As of 2018 / Nov. / 11, data can not be downloaded from the official download site of celebA (http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html).
It seems that Dropbox’s communication fee restriction is becoming a problem.
There, download celebA using the code of another repository uploaded to github.

@ Ubuntu 16
apt-get install git
sudo pip install requests
git clone https://github.com/carpedm20/DCGAN-tensorflow
cd DCGAN-tensorflow
python download.sh celebA

celebA is saved in data/img_align_celeba.zip.