サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
yaju3d.hatenablog.jp
はじめに ここ数ヶ月は別の件で忙しくて、機械学習に向き合えていませんでした。 仕事で調べたり学んだことはQiitaブログの方に書いていて結構すんなり書けるんですが、このブログは数学・物理・機械学習と特化するようにしているので、パワーがないと進まない。 ここ数ヶ月で頭の片隅にあったのは、損失関数の「交差エントロピー」です。今回はこれを理解していこうと思います。 何故、気になっていたのかというと、下記サイトの誤差関数(loss)のときのTensorflow関数「tf.nn.sigmoid_cross_entropy_with_logits」があり、シグモイド関数と交差エントロピーが一緒になっているからです。 yaju3d.hatenablog.jp # 誤差関数(loss) loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logit
はじめに 機械学習の学習すると必ず出てくる用語にシグモイド関数があります。 今回はこれを理解してみたいです。 シグモイド曲線 シグモイド曲線は入力した値を0から1の間に収めてくれる関数の1つです。 多くの自然界に存在する事柄は、このようなS字曲線を取ります。 欠点として1に近づくほど1そのものにならない性質があります。 使う理由 分類した場合に「1」と「-1」という2択ではなく、シグモイド関数は確率で分類すると考えます。 Aの確率が80%で、Bの確率が20%といった感じで分類していきます。 シグモイド曲線の値は 0 から 1 の間になるので確率として使用できます。 すべての関数は微分ができるわけではありません。 尖った点があったり、線が切れていると微分はできないのです。 ※尖っていた場合、同じ点に対して二つの傾きが計算できてしまうので微分不可能になる。 どうしてシグモイド関数は滑らかな関数
はじめに 最近は、Anacodaを使わずにGoogle Colaboratoryを使用しています。 Google ChromでGoogle Colaboratory にアクセスすれば、すぐにPythonが使えますからね。 下記サイトでは勾配降下法 (Gradient Descent)のグラフをアニメーション化しており、かっこいいです。 sinhrks.hatenablog.com Google Colaboratory でPython 3に変更して動かして見たのですが、アニメーションは動きませんでした。 アニメーション 下記サイトを参考に Jupyter notebookと同じようにmatplotlibのnbagg を有効にしてみたりしたのですが、駄目でした。 qiita.com ネットの検索条件「Google Colaboratory animation」と英語化して、見つけたのが下記サ
はじめに 機械学習を学んでいると対数logがでてくる。基礎的なことから対数を理解してみたい。 指数はイメージし易いが、対数は分かりにくいと思われている。指数と対数はペアの関係にあり、かけ算とわり算のように逆関係にある。 先ずは、指数の大きさを視覚的にイメージするために、アメリカ・ワシントンにある航空宇宙博物館で公開されていた9分半の映画「パワーズ・オブ・テン」を紹介する。 9分半の映画 パワーズ・オブ・テンです、10の冪()の違いを視覚でご覧ください。 Powers of Ten with Japanese translation 対数とは 例えば、2を3回かけ算すると になります。これを「2を3乗したら8になる」と言い、以下のように書きます。 このとき、2 の右上に乗っている 3 のことを「指数」と言います。指数は「1つの数を何回掛けるか」を表しています。 一方、「◯を何乗すれば△になる
はじめに 前回の続きです。 yaju3d.hatenablog.jp 勾配降下法をどうして使うのかは理解できたのですが、その計算方法がまだ理解が足りてなくて、微分の本とかを読んでいました。 数学は苦手なんですが、理解はしたい。おまじないとかそういうルールだからとかで済ましたくないんですよね。 勾配降下法の他にも最急降下法とか確率的勾配降下法の用語がありますので、この違いも理解したい。 今回は下記の本(Kindle)を参考にしている。 勾配降下法 勾配には、傾斜の程度・斜面という意味があります。 上図では1変数による関数でグラフは放物線となります。 リンゴとミカンの値段を求める場合は2変数による関数となり下図のようにワイングラスの底のような形になります。ちなみに3変数以上は図で表わすのは困難です。 下図は関数のグラフの一部を拡大し、斜面に見立てた図となります。その斜面上のある点Pにピンポン玉
はじめに 機械学習をやる上では「勾配降下法」を理解しておきたい。 「勾配降下法」で検索すると自分が書いた記事が見つかります。 yaju3d.hatenablog.jp 資料を元に書いた記事なので当時はよく理解していたわけではないですが、今、読み返すとふむふむと言ったところです。今回はもっと深く追求していきます。 機械学習は最適解を求めるのが目的です。 上記記事の八百屋の件でも、条件が当てはまる最小の値をひたすら繰り返し計算すれば求めることが出来るのですが、これを出来るだけ少ない計算で最小値を見つけるようにしたい。ここで「勾配降下法」を使うことになるわけです。 解けない連立方程式 どうせなので八百屋の問題を使います。 例題 1 リンゴ1個とミカン3個を買うと190円、リンゴ3個とミカン1個を買うと330円するようです。 リンゴ2個とミカン4個を買うといくらになるでしょうか? 今回は数式で表し
はじめに 以前、ベイジアンフィルタを実装して自然言語処理に興味を持ち始めたので、とりあえず「king - man + woman = queen」で有名になった「Word2Vec」を動かしてみたいと思った次第です。 yaju3d.hatenablog.jp Word2Vecとは Word2Vecは米グーグルの研究者であるトマス・ミコロフ氏らが提案した機械学習の分野で使われる、ニューラルネットというモデルを使ったツール/ライブラリです。名前の通り、word(単語)をvector(ベクトル)に変換します。 この技術をベースに、「単語」だけではなく「文書」にも意味を持たせてベクトルとして捉えて利用できる技術「Doc2Vec」も作成されました。 ベクトルは1行m列やn行1列のこと、または「大きさと向き」を持つ量のことです。単語を文字列としているだけでは分類することは出来ないので何かしら意味のある数
はじめに 前回はパーセプトロンを多層にすることで、線型分離可能でない問題を解けることを学びました。 yaju3d.hatenablog.jp これを視覚として見ながら学びたいということで見つけたのが「TensorFlow Playground」となります。 しかし、初見では何がなんだか分からないので「TensorFlow Playground」のことを書いている幾つかのブログを参考に学んでいきます。 TensorFlow Playgroundとは TensorFlow Playgroundは、A Neural Network Playgroundとも呼ばれ、Daniel SmilkovさんとShan Carterさんが開発したニューラルネットワークの仕組みを理解するための教育コンテンツです。 TensorFlow Playgroundの日本語訳を書いてくれているのが「TensorFlow
はじめに TensorFlow関連の記事を書いている割には、ディープラーニング(深層学習)について理解度が足りてないということもあって基礎的なところから理解してみようと思いました。幸い、ここ1年で本やブログ記事が増えてきたので助かります。 参考にした下記の2つ本となります。あと、この本の内容を元にした幾つかのブログの記事などです。 自分なりに理解したことをまとめて書いていきますが、詳細はリンク先を参照してください。 線形と非線形 機械学習をやる上で「線形」と「非線形」という言葉が出てきますので、先に説明しておきます。 線形 簡単に言えば、直線的な線のことです。 一次関数「例 y = ax + b」のように定数倍と足し算・引き算で表されたものとなります。 【追記 2017/07/21】 y = ax + bは、線形ではないとのことです、線形の定義では原点を通るとのこと。 そもそも線形ってどう
はじめに これまでPythonを使用するのに「Jupyter Notebook」を使用してきたのですが、簡単な確認ならこれで十分なんですが本格的に開発するとなるとブレークポイントを使ったデバッグが出来ないと自分には辛いということで、Python開発環境を整えることにしました。 候補として以前使用したことがあるPythonの統合開発環境(IDE)「PyCharm (パイチャーム)」とマイクロソフト発のクロスプラットフォームなテキストエディターである「Visual Studio Code」があります。 今回は、話題になっている「Visual Studio Code」を使用してみます。 ちなみに、PyCharm (パイチャーム)については下記サイトを参考にするといいでしょう。 qiita.com 環境 OS:Windows10 Home(64bit) Python:Python 3.5.2 ::
はじめに 前回、Word2Vecを初めて試してみて面白いと思ったので、日本語に挑戦することにした。 yaju3d.hatenablog.jp 日本語に挑戦するにあたり、どうせなら旬なネタがいいなと思って、今のお気に入りは火曜ドラマ「逃げるは恥だが役に立つ」で「みくに - 平匡」の結果がどうなるか見てみたいと思ったわけですが、元となるデータ(2chデータやTVの感想)を収集するのが面倒くさいのと、まだドラマが中盤なので後回しにしました。 その代わりとして思いついたのが新海誠さんの「君の名は。」です。小説が出ているので小説をそのまま取り込めば、ノイズが入らないのでいい結果が得られると思ったからです。ただデータ量としては少ないのが懸念です。 小説のテキスト化 小説 君の名は。 (角川文庫) Kindle版を購入しました。 下記の手順に従って、「君の名は。」をテキスト化しました。個人でデータマイニ
はじめに これは、機械学習に必要な高校数学やり直しアドベントカレンダー Advent Calendar 2016の10日目の記事です。 線形回帰 ー 誤差の和の式(データ個数 n 個の場合) 2乗することに関しては、以前書いた下記の記事にてピタゴラスの定理で距離を求めるという理解を得ることが出来ました。 正の数と負の数が混ざっていると都合が悪いから、必ず正の数にするために2乗するってことです。 それなら絶対値を取った値でもいいと思われるが、目的関数を微分することになった時に絶対値の微分より2乗の微分の方が簡単になる。 絶対値だと微分ができない場所があるのと、場合分けをしないといけないから面倒なのです。 yaju3d.hatenablog.jp でも、全体を 2 で割ってる理由はなんだろうという疑問を持ちました。 経緯 「やる夫で学ぶ機械学習 - 単回帰問題 -」とgihyo.jpの「機械学
はじめに TensorFlow 0.12からWindowsをサポートするようになりました。これにより、VirtualBoxやDockerを使う必要がなくなります。 【追記 2017/03/02】 2017/02/16にTensorFlow 1.00がリリースされました、遅ればせながら今回TensorFlowをバージョンアップしました。 【追記 2017/11/25】 2017/11/08にTensorFlow 1.40がリリースされました、遅ればせながら今回TensorFlowをバージョンアップしました。 TensorFlow 1.4.0 リリースノート(翻訳) (tensorenv) C:\Users\(ユーザー)>pip install --ignore-installed --upgrade tensorflow (tensorenv) C:\Users\(ユーザー)>python
はじめに 手書き文字認識(MNIST)による多クラス識別問題をやってみる。 前回に引き続きこの資料を基に理解していく。 TensorFlow を使った�機械学習ことはじめ (GDG京都 機械学習勉強会) from Toru UENOYAMA MNISTとは 手書きの文字列を認識するもので、画像認識では定番と言えるテーマだ。 手書き文字の認識データは、機械学習の著名な研究者であるYann LeCun氏のwebsiteで公開しており、0-9のいずれかの数字が学習用、テスト用それぞれで60000枚と10000枚含まれている。 各数字画像の大きさは28×28ピクセルの単色画像で、RGBではなくGray-scaleの色空間となっている。 多クラス識別問題 前回の八百屋の識別問題が、買えるか買えないかの2クラスの分類であったが、今回は手書き文字を0-9と多クラスの分類となる。 手書き文字認識 機械学習
はじめに 静岡Developers勉強会では、今年の勉強会のテーマとして「人工知能ハンズオン」を2016/4/23に開催しました。 その際に「Automatic Colorization(白黒画像の自動彩色)」については、間に合わずに事前に試すことが出来なかった為、勉強会当日は紹介のみに留まってしまいました。 GW期間があって試すことができましたので、その顛末を記事を書いてみました。なお、実行する場合にはメモリ不足から解消しないと2度手間になりますので注意してください。 Automatic Colorizationとは 白黒写真や動画をディープ・ラーニングを用いて自動でカラーに変換するRyan Dahlさんによるプロジェクトです。ちなみにライアン・ダール(Ryan Dahl)さんは、Node.jsの創始者でもあります。 自動彩色については他にもバークレーのコンピュータ科学者 Richard
はじめに 予測モデルを推測する分かりやすいサンプルを見つけたので、この資料を基に理解していく。 TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会) from 徹 上野山 機会学習勉強会 (2016.2.27)のつぶやき 実績データからパラメータを推定。パラメータを使って、結果を予測 パラメータ特定できない場合、合計金額の誤差が小さくなるような単価を採用する 全ての組み合わせを検証するのではなく、少ない計算で最短距離で行う 学習:予測式、誤差の計算、誤差の最小とする組み合わせ 先程の例を線形回帰(線形重回帰)の式にする 誤差を決める。誤差関数と最適化手法を記述 学習率が大きすぎても失敗する。 勾配降下法とは 誤差の最小値を求める手法。 パラメータの特定できない場合、誤差が小さくなるような値を採用する。 イメージ例 例題1 たかしくんは八百屋へお使いに行きました
はじめに 静岡Developers勉強会では、今年の勉強会のテーマとして「人工知能ハンズオン」を2016/4/23に開催します。 以前、TensorFlowを自PC(Windows 10 64bit)にインストールした記事を書きました。 yaju3d.hatenablog.jp ですが初心者の人には敷居が高いかと思い、もっと簡単な方法がないか模索していました。 ネットで「Tensorflow Windows インストール」で検索すると、Dockerなら簡単だよというのが見つかるのですが、Dockerってクラウドで使うものだと思い込んでいたために見逃していました。 Dockerを調べるとクラウドでなくても使えることが理解できたので、今回Dockerを使ってのTensorflowのインストールに挑戦してみました。 ※Dockerを使用するにはPCが64bitである必要があります。 qiita.
はじめに 静岡Developers勉強会では、今年の勉強会のテーマとして「人工知能ハンズオン」を予定しています。 人工知能ハンズオンとして、Googleが提供しているオープンソースの人工知能ライブラリ「TensorFlow」の使い方を学ぶという方向にでもしようかな。 とりあえずセッションを担当する自分が現状では何も分かっていない状態ですので、先ずは「TensorFlow」を自PCにインストールしてみました。 TensorFlow Ver 0.12でWindowsがサポートされましたので、記事を作成しました。 yaju3d.hatenablog.jp もはやLinux版の環境が古くなったため、新しく記事を作成しました。 yaju3d.hatenablog.jp インストールがお手軽なDocker版も一緒にお読み下さい。 yaju3d.hatenablog.jp アクセス解析をみると「tens
はじめに 静岡Developers勉強会では、今年の勉強会のテーマとして「人工知能ハンズオン」を予定しています。 前記事にて、自PCに「TensorFlow」をインストールしてみました。 インストールしただけで、「TensorFlow」がどういったものなのかをまったく理解出来ていません。 ネットで検索した幾つかのサイトを参考にこれから理解していこうと思います。 Pythonの入門として、勉強会仲間であるUsekさんの記事を参考にするといいでしょう。 qiita.com エディタについて TensorFlowはPythonを使ってプログラムしていくのですが、エディタが無いことにはプログラムを組みにくいですよね。 以前、静岡Developers勉強会で「実践コンピュータービジョン」を行った際、Python向け統合環境(IDE)の「PyCharm」を使っていました。 その後、もう少し手軽なものと
Σ(シグマ)って何 高校2年生頃に数列としてΣ(シグマ)という数式を習います。 例えば、1からnまでの数列の総和を求めなさいといった場合、下記のよう数式になります。 このくらいは簡単に理解できますね。 ちなみに、1からnまでの数列の総和は下記の公式で簡単に求めることが出来ます。 参照:ガウスの少年時代の逸話 あと、足し算ではなく掛け算の場合、Π(パイ)という数式を使います。 でも、掛け算の場合は対数にして掛け算を足し算に変換するため、Σ(シグマ)にすることが多いです。 Σ(シグマ)の意味 Σの意味は「合計」です。英語で言えば、「sum」です。 そして、Σは「シグマ」と読むギリシャ文字(σの大文字)で、英語のアルファベットの「S」(sの大文字)に相当します。 ですから、頭文字としてΣが使われます。 Σ(シグマ)の入門 世間的にはビッグデータを活用しようと統計学を学ぶ機会が増えてきました。 幾
画像の変形処理を行う上で逆行列を行う処理があり、理解がとぼしいためか頭が混乱してきます。 以前、テクスチャの仕組みを理解しようとした際にも、逆行列が出てきました。 あらためて、逆行列とはなんなのかをイチから理解していこうと思います。 行列には、足し算・引き算・掛け算は定義されているのですが、割り算は定義されていません。 では、行列で割り算が出来ないかというとそうではありません。 行列ではなく自然数の場合、「1」に「3」を掛けると「3」となります。これを元の「1」に戻す場合、「3で割る」ことで元の「1」になりますが、「1/3を掛ける」としても元の「1」になります。 この場合、「3で割る」とは言わずに「1/3を掛ける」と考えます。 割り算のかわりに逆数を掛けることで、割り算と同様の結果が求めることが出来るのです。 行列でも同じ様に「逆数を掛ける」に近い考え方をします。 行列に逆数を掛ける際に使
前回の続きです。 ただ、私としては台形に変形させたいので、8次元連立一次方程式を解いた方式をさらに模索していた中で、下記サイトを見つけました。 ホモグラフィ(CSS3 Transform 3D Test)- Shogo Computing Laboratory 内容的には私が目指していたものですが、残念なのは中身はCSSなんですよね。 射影変換(ホモグラフィ)について理解してみる - デジタル・デザイン・ラボラトリーな日々 先ず下記の8次元連立一次方程式を解く方法ですが、これには行列を使えばいいことが分かりました。 変換前の座標 左上から時計回り 変換後の座標 左上から時計回り 8次元連立一次方程式 これを行列式に変換します。 CSSを使用したホモグラフィのソースリストを見ても、変換元座標(origin)と変換先座標(markers)で4点分ループして行列式を作成していますね。 var i
「3Dを基礎から勉強する フラットシェーディング」の記事を書いて、次は立方体のテクスチャマッピングに取り掛かろうと思ったんですが、ふとアフィン変換で台形は出来ないってことを書いたことを思い出したんです。テクスチャマッピングについては、「テクスチャマッピングを理解してみる」で三角形に分割することで台形にすることが出来たのですが、分割しなくても台形にするには「射影変換(ホモグラフィ)」すれば出来ることが分かりました。 早速、射影変換の調査に取り掛かったのですが、これが自分の理解度が足りないのか1ヶ月以上経って、やっとこうして記事を書こうと思うところまで理解が進んだところです。 まだ理解が途中段階であるため、理解した現状まで書いていきます。 射影変換(ホモグラフィ)には、下記の変換式があります。 変換式 変換式は以下の通り。 u = (x*a + y*b + c) / (x*g + y*h +
射影変換についてツールも作成して、まーそれなりに理解は出来てきたわけですが、初回の記事で取り上げたHomography HIDIHO!サイトの射影変換の下記ソースリスト(actionscript)の疑問が残っていたわけです。(cv.jsのgetPerspectiveTransformも同様) static private function getSystem( P:Array ):Array { var system:Array = new Array( 8 ); var sx:Number = (P[0].x-P[1].x)+(P[2].x-P[3].x); var sy:Number = (P[0].y-P[1].y)+(P[2].y-P[3].y); var dx1:Number = P[1].x-P[2].x; var dx2:Number = P[3].x-P[2].x; var
ベクトルの正規化とは、ベクトルの方向は維持しつつ大きさを「1」にする事を指します。 この大きさが「1」のベクトルのことを単位ベクトルと呼びます。 左図の座標(3,3)にあるベクトルの大きさは、 数学者は、2本の垂直な線を両脇に置くことでベクトルの大きさを表します。 ベクトルの大きさ ベクトルを正規化する際には、ベクトルの各成分をベクトルの大きさで除算します。 数式は下記となります。Nは正規化の英語(normalize)です。 右図を正規化した場合、ベクトルの大きさを「1」とするので、各成分は0.7となります。 単位ベクトルを作っておけば、定数倍して簡単にいろんな大きさのベクトルが作れるようになります。 ※補足 数学的なお話として、「7cmで35gの棒は、15cmで何gになりますか」という問題があった場合、下記の比例式となります。 7:35 = 15:x これは、7cmが35(g)だから1c
前回、回転と拡大縮小と平行移動を3×3行列に合わせた式が以下になります。 回転行列 拡大縮小行列 平行移動行列 | cos -sin 0 | | sx 0 0 | | 1 0 t.x | | sin cos 0 | | 0 sy 0 | | 0 1 t.y | | 0 0 1 | | 0 0 1 | | 0 0 1 |そもそも、何故行列にしたのか? 本やWebサイト等を読んで、アフィン変換には行列を使用するといった理解のみで前回まで進んできた。 行列を使わずにプログラムを組んでも回転と拡大縮小と平行移動は出来るのだから、わざわざ行列を使用する本質を実際に組むまで理解できていなかった。 実際に組んでみて分かったのは、「平行移動してから拡大縮小して回転させる」といった複数の操作が行列と行列の掛け算によって、一つにまとめて出来てしまうといった利点があることが分かった。 「平行移動→図形オブジ
このページを最初にブックマークしてみませんか?
『デジタル・デザイン・ラボラトリーな日々』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く