ChunPom’s diary

数学、物理、機械学習に関する話題。あと院試、資格、大学入試まで。

数学、物理、機械学習

数学、物理、機械学習を中心に、

理論、応用例を紹介していきたいと思います

 

また、参考図書や論文なども適宜載っけていきます。

 

趣味、大学入試、院試や資格などの勉強にお使いください。

 

あと、時々無関係な話題が入ってきますが、無視してください。

参考書紹介(数理系) 2021年版

☆数学

学部レベルの数学を中心に、オススメの参考書を紹介します。

線形代数

・チャート式シリーズ 大学教養 線形代数

高校向け参考書メーカのチャート式が、大学向けにも参考書を書いた!問題も豊富で分かりやすい、新しいスタンダード教科書。

チャート式シリーズ 大学教養 線形代数 (チャート式・シリーズ)

チャート式シリーズ 大学教養 線形代数 (チャート式・シリーズ)

  • 発売日: 2020/04/17
  • メディア: 単行本(ソフトカバー)
 

 

微積

・チャート式シリーズ 大学教養 微分積分

 

統計

統計学入門 (基礎統計学Ⅰ)

統計学入門 (基礎統計学?)

統計学入門 (基礎統計学?)

 

自然科学の統計学 (基礎統計学)

自然科学の統計学 (基礎統計学)

自然科学の統計学 (基礎統計学)

 

 ・日本統計学会公式認定 統計検定1級対応 統計学

日本統計学会公式認定 統計検定1級対応 統計学

日本統計学会公式認定 統計検定1級対応 統計学

  • 作者: 二宮嘉行,大西俊郎,小林景,椎名洋,笛田薫,田中研太郎,岡田謙介,大屋幸輔,廣瀬英雄,折笠秀樹,日本統計学会,竹村彰通,岩崎学
  • 出版社/メーカー: 東京図書
  • 発売日: 2013/04/08
  • メディア: 単行本
  • この商品を含むブログ (5件) を見る
 

・確率統計演習 (2)

確率統計演習 (2)

確率統計演習 (2)

 

 

複素解析フーリエ変換、特殊関数

・詳解物理応用数学演習

上記分野の練習問題がいっぱい

詳解物理応用数学演習

詳解物理応用数学演習

  

フーリエ解析入門

数学科向け。同シリーズの別本もオススメ。

 

微分方程式

詳解物理応用数学演習

偏微分方程式入門 (基礎数学) 

偏微分方程式入門 (基礎数学)

偏微分方程式入門 (基礎数学)

 

 

確率微分方程式

確率微分方程式とその応用

確率微分方程式とその応用

確率微分方程式とその応用

  • 作者:泰明, 兼清
  • 発売日: 2017/08/19
  • メディア: 単行本(ソフトカバー)
 

 ・確率微分方程式

確率微分方程式―入門から応用まで

確率微分方程式―入門から応用まで

 

 

グレブナー基底

・グレブナー道場

グレブナー道場

グレブナー道場

  • 発売日: 2011/09/23
  • メディア: 単行本
 

参考書紹介(量子物理、統計物理編) 2021年版

☆物理(量子物理、統計物理編)

大学レベルの物理を中心に、オススメの参考書を紹介します。分野の偏りは愛嬌。

量子力学

量子力学 (KS物理専門書)

満遍なく基本的な話題に触れてるし、そこそこ練習問題が豊富。

量子力学1 (KS物理専門書)

量子力学1 (KS物理専門書)

 
量子力学(2) (KS物理専門書)

量子力学(2) (KS物理専門書)

 

場の理論(物性向け)

・凝縮系物理における場の理論

物性のほぼ全ての分野の話題を扱ってるのではなかろうか。特にメソ系、非平衡の記載が詳しい。

凝縮系物理における場の理論〈上〉

凝縮系物理における場の理論〈上〉

  • 作者: Alexander Altland,Ben Simons,新井正男,井上純一,鈴浦秀勝,田中秋広,谷口伸彦
  • 出版社/メーカー: 吉岡書店
  • 発売日: 2012/06
  • メディア: 単行本
  • 購入: 1人 クリック: 1回
  • この商品を含むブログを見る
 
凝縮系物理における場の理論 下

凝縮系物理における場の理論 下

 

 ・物性物理のための場の理論 グリーン関数

 各物性値のミクロな導出において、グリーン関数の計算法が事細かに掲載。こいったコンセプトの本は意外に少なかった気がする(フェッターワレッカは字が読みにくいし)。

 

熱、統計力学

・熱統計力学(物理学基礎シリーズ)

掲載してるコードが化石を通り越して石油になりつつあるが、入門書としてはGOOD。

熱・統計力学 (物理学基礎シリーズ)

熱・統計力学 (物理学基礎シリーズ)

 

・大学演習 熱学統計力学

量子統計は少なめだが、古典の話題は詳しすぎるくらい網羅してる。問題数が無限にあるので院試の際にも使える。日頃の業務にも使ってます。

大学演習 熱学・統計力学

大学演習 熱学・統計力学

 

統計力学

 難しめだが、含蓄深い記述が多い。非平衡詳しい。

統計力学【現代物理学叢書】 (岩波オンデマンドブックス)

統計力学【現代物理学叢書】 (岩波オンデマンドブックス)

 

 

相転移

相転移 臨界現象の統計物理学

 量子アニーリングの父の本。相転移に関する大体の基本事項は網羅。

相転移・臨界現象の統計物理学  新物理学シリーズ

相転移・臨界現象の統計物理学 新物理学シリーズ

 

 

磁性

・磁性体の統計理論 

 厳密解、強磁性体&反強磁性体の局在スピン、スピン波の振る舞いが網羅的に詳しく載ってる。

磁性体の統計理論 (物理学選書 (12))

磁性体の統計理論 (物理学選書 (12))

 

 ・磁性と超伝導の物理

 ミクロな視点からの磁性発現や、遍歴電子系との絡みが詳しい。最終的には近藤効果や超伝導にたどり着く。

磁性と超伝導の物理 -重い電子系の理解のために-

磁性と超伝導の物理 -重い電子系の理解のために-

 

 

スピントロニクス

スピントロニクス シリーズ21世紀の物性

基本理論から、最近の話題まで内容が豊富。

 ・スピントロニクスの物理 -場の理論の立場から

理論面が詳しい。特に非平衡グリーン関数を用いた輸送等。同著者の前書「スピントロニクス理論の基礎」より内容が整理されてる印象。

 

量子輸送

半導体量子輸送物性

メゾ系の話題が豊富。実験の話も多い。

半導体量子輸送物性 (新物理学シリーズ)

半導体量子輸送物性 (新物理学シリーズ)

 

 ・量子輸送

 非平衡グリーン関数を用いて、量子デバイスの輸送現象を解説する名著。ち

量子輸送 基礎編 ナノスケール物性の基礎

量子輸送 基礎編 ナノスケール物性の基礎

 
量子輸送 応用編 ナノデバイスの物理

量子輸送 応用編 ナノデバイスの物理

 

 

量子コンピュータ

・量子コンピューティング ―基本アルゴリズムから量子機械学習まで―

量子ゲート方式のアルゴリズム紹介。基本的なアルゴリズムはもちろん、最近の量子機械学習にも言及。

 ・量子アニーリングの基礎

量子コンピュータのうち、量子アニーリングに焦点を当てた本。安いし、理論の詳細が載ってる。最近流行りつつある量子機械学習の説明もあり。

量子アニーリングの基礎 (基本法則から読み解く物理学最前線 18)

量子アニーリングの基礎 (基本法則から読み解く物理学最前線 18)

 

 

 

量子制御

・量子測定と量子制御

古典制御〜量子制御の対応がわかりやすい。

量子測定と量子制御 2016年 03 月号 [雑誌] (数理科学 別冊)

量子測定と量子制御 2016年 03 月号 [雑誌] (数理科学 別冊)

 

 

超伝導

超伝導入門

格好の入門書。

超伝導入門 (物性科学入門シリーズ)

超伝導入門 (物性科学入門シリーズ)

 

統計力学から理解する超伝導理論

統計力学の問題として記述されており、物性に詳しくなくても取り組みやすい。

 

結晶と物性

・物質の対称性と群論

大判の本なので、結晶構造の理解が容易。配位子場のミクロな計算をもっと練習したい人は、次の参考書をチェック。

物質の対称性と群論

物質の対称性と群論

 

 ・配位子場理論とその応用

これ以上詳しい本は存在しない。

配位子場理論とその応用 (物理科学選書)

配位子場理論とその応用 (物理科学選書)

 

 

 

参考書紹介(機械学習系) 2021年版

機械学習の参考書(2021年版)

とりあえず機械学習を使いたい!用の本

フリーソフトで始める機械学習入門

遊び向け。

フリーソフトではじめる機械学習入門(第2版):Python/Wekaで実践する理論とアルゴリズム

フリーソフトではじめる機械学習入門(第2版):Python/Wekaで実践する理論とアルゴリズム

 

Python機械学習プログラミング 達人データサイエンティストによる理論と実践

 (impress top gear) 

コピーアンドペーストpythonで動く。思考停止で使いたい人向け。ただし、基本的な手法しか載ってない。

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

 

 

より実践的な実装特化の本

・Kaggleで勝つデータ分析の技術

Kaggleで流行っている比較的新しい機械学習手法の実装ができる。前処理方法も詳しい。

 

カーネル法

カーネル多変量解析非線形データ解析の新しい展開 (シリーズ確率と情報の科学)

Representer定理の説明がわかりやすい。基本はコレで。

カーネル多変量解析―非線形データ解析の新しい展開 (シリーズ確率と情報の科学)

カーネル多変量解析―非線形データ解析の新しい展開 (シリーズ確率と情報の科学)

 

カーネル法入門―正定値カーネルによるデータ解析 (シリーズ 多変量データの統計科学)

 上よりは応用寄りで、上級向け。

カーネル法入門―正定値カーネルによるデータ解析 (シリーズ 多変量データの統計科学)

カーネル法入門―正定値カーネルによるデータ解析 (シリーズ 多変量データの統計科学)

 

 

ベイズ統計

ベイズ推論による機械学習入門

入門というなかれ、かなり詳しい。

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

 

パターン認識機械学習 上下

 有名すぎる本。基本的な話題は大体載っててお得だが、カーネル法は内容が薄いので、上で述べた本もぜひ参考に。

パターン認識と機械学習 上

パターン認識と機械学習 上

 
パターン認識と機械学習 下 (ベイズ理論による統計的予測)

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

 

ベイズ統計の理論と方法 

 理論ガチの本。数理統計、統計力学代数幾何(グレブナー基底)のベースが無いと難し目。

ベイズ統計の理論と方法

ベイズ統計の理論と方法

 

 

ニューラルネット

パターン認識機械学習 上下

・詳細ディープラーニング

 RNNの実装に詳しい入門書。RNNはモデルが複雑なので、理論を理解しつつちょっとずつ実装していくのが一番身につく。

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

  • 作者:巣籠 悠輔
  • 発売日: 2017/05/30
  • メディア: 単行本(ソフトカバー)
 

・画像認識

CNNベースの画像認識向けの教科書。実装に関してはググるのがベスト。

画像認識 (機械学習プロフェッショナルシリーズ)

画像認識 (機械学習プロフェッショナルシリーズ)

  • 作者:原田 達也
  • 発売日: 2017/05/25
  • メディア: 単行本
 

・複素ニューラルネットワーク

複素ニューラルネットワーク(第2版) 2016年 06 月号 [雑誌]

複素ニューラルネットワーク(第2版) 2016年 06 月号 [雑誌]

 

 

最適化

・しっかり学ぶ数理最適化

 分厚くてお買い得。連続最適化だけでなく、離散最適化の基本もほぼ載ってる。

メタヒューリスティクスと応用

 個々の中身はうっすいが、メタヒューリスティックな手法(アニーリング、遺伝アルゴリズム、粒子群最適化など)に関する網羅的な紹介がされている。全部をまとめて紹介してるのはコレくらい。

メタヒューリスティクスと応用

メタヒューリスティクスと応用

 

 

強化学習

強化学習

大御所の昔の名著。基本概念はほぼ全て網羅。 

強化学習

強化学習

  • 作者: Richard S.Sutton,Andrew G.Barto,三上貞芳,皆川雅章
  • 出版社/メーカー: 森北出版
  • 発売日: 2000/12/01
  • メディア: 単行本(ソフトカバー)
  • 購入: 5人 クリック: 76回
  • この商品を含むブログ (29件) を見る
 

強くなるロボティック・ゲームプレイヤーの作り方 プレミアムブックス版

 ~実践で学ぶ強化学習~

実装(C)が比較的詳しく載ってる珍しい本。

これからの強化学習

 ナウい手法を多く掲載。

これからの強化学習

これからの強化学習

  • 作者: 牧野貴樹,澁谷長史,白川真一,浅田稔,麻生英樹,荒井幸代,飯間等,伊藤真,大倉和博,黒江康明,杉本徳和,坪井祐太,銅谷賢治,前田新一,松井藤五郎,南泰浩,宮崎和光,目黒豊美,森村哲郎,森本淳,保田俊行,吉本潤一郎
  • 出版社/メーカー: 森北出版
  • 発売日: 2016/10/27
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (3件) を見る
 

 

バンディット問題、ベイズ最適化

・バンディット問題の理論とアルゴリズム

バンディッド問題に特化した珍しい本。ベイズ最適化などもちゃんとのっていて、役に立つ。個人的には、数理統計をしっかり身につけてから読むべき。

バンディット問題の理論とアルゴリズム (機械学習プロフェッショナルシリーズ)

バンディット問題の理論とアルゴリズム (機械学習プロフェッショナルシリーズ)

 

 

 今後も随時拡張していきます!

グレブナー基底は何に使えるか?

名前はよく聞くグレブナー基底、一体何に使えるんだ?ということで、具体的な応用先を並べてみた。グレブナー基底をわかりやく言うと「多項式の集合を、シンプルで性質の良いものに変えた多項式の集合」である。例えば連立方程式を解くときに1文字ずつ変数消去していくことで解を求めたと思う。つまり、x,y,zが入り混じった複雑な式から、xのみの式、yのみの式..を求めていた。これがまさにグレブナー基底の考えである。

①数式処理システム
グレブナー基底の周辺理論の利点に、文字式を残したまま解析したり、近似なしで求積できることがある。例えば{\displaystyle ax^2-b=0}(但し各係数は正)から{\displaystyle x=\pm \sqrt{b/a}}を求めることができる。もちろん、通常の数値計算ではこういった計算は難しい。数式処理システムのソフトでは、以上の利点からグレブナー基底に関するアルゴリズムが実装されている場合がある[1]。

②整数計画問題
整数計画問題とは、整数の変数に関する多項式等で表される目的関数を、制約条件化で最大あるいは最小にするような変数の値を求める問題である。制約条件の式から生成されるトーリックイデアルグレブナー基底を算出し、その基底の多項式で割り算を続けていくことで最適化を行うConti-Traversoのアルゴリズムがある[2]。一度グレブナー基底が得られればあとは瞬殺なのだが、その基底を求めるまでに時間がかかるため、大規模な整数計画問題を解くことは難しい。そのため、通常は内点法や分枝限定法などが使われる[3]。

③学習理論
機械学習では、予測精度が学習データのサンプル数{\displaystyle n}に対してどのように振舞うかを議論したいことがよくある(学習理論)。より具体的には尤度関数の{\displaystyle n\to \infty}での漸近的挙動を見たい。ただ、機械学習の場合はモデルが複雑すぎて、尤度関数をモデルパラメータの関数としてみると見通しが良くない。そこで、特異点解消定理を用いてより都合の良い変数に変換してから挙動を見る方針をとる場合がある[4]。この特異点解消定理の周辺ではグレブナー基底の理論が用いられている。

量子アニーリング
量子アニーリングは、イジングモデルと呼ばれる二次関数のモデルの最大値や最小値を求める非ノイマン型の計算手法である[5]。これを用いれば、これまで通常の整数計画法では解けなかったような大規模な問題を拘束に解くことができるのでは、と期待されている。ただし、世の中の問題はかなり複雑なので(例えば高次の多項式)、これをどうやって二次関数に落とし込むかが重要となる。グレブナー基底を用いれば、多項式の問題をうまく二次関数に変換することができる[6]。また、現在開発されている量子アニーリング計算機の多くは、ハードウェアの制約上スピン素子同士の接続に制限があり、イジングモデルの係数を自由に設定できない。従って、量子アニーリングで問題を解くには、先ほど述べた二次関数への変換後、さらにスピン素子の接続を踏まえて埋め込む必要がある。すなわち、グラフ理論の言葉でいうMinor Embeddingである。グレブナー基底を用いれば、この埋め込みも可能である[7]。ただし、問題の変数が大規模な場合は②と同様の理由で通常の整数計画法を用いたほうが良いだろうが。

⑤実験計画法
実験計画法で得られたサンプルから、p値を算出する方法にグレブナー基底を用いることも可能である[8]。p値はサンプル数が増加すると解析的に算出することが難しくなる。そこでマルコフ連鎖モンテカルロ法を用いた数値積分が使用されるのだが、なるべく収束の早いモンテカルロサンプリングが望ましい。その指針をグレブナー基底で与えることができる。

⑥主成分分析
もう一つ最近の話題として、主成分分析へのグレブナー基底適用がある。主成分分析は変数の線形和で書けるような基底をいくつかとり、その基底で表した座標上でデータの分散が最大になるように、基底を決定する手法である。データの分散が大きいほど情報量が多いということなので、主成分分析は情報量が最も多くなるような軸(基底)を求める分析法である。ただ、一般に現実のデータは非線形であるから、必ずしも線形な基底では不十分で、より高次な多項式変換で表される基底を用いたほうが良いだろう。Vanishing Component Analysis (VCA)では、このような基底をグレブナー基底を用いて求める手法を提案している[9]。これにより、非線形なデータでも主成分分析が可能になると期待される。


このように、グレブナー基底には驚くほど広範囲な応用先がある。ただ、現時点で広く実用化されているのは①くらいだろうか。グレブナー基底を求めるアルゴリズムは、現状計算負荷の高いBuchberger'sアルゴリズムくらいしか無いためである。この計算速度が向上すれば、グレブナー基底の応用はさらに浸透していくことだろう。また、各応用先の引用を最後に載せておく。
[1] https://www.riam.kyushu-u.ac.jp/fluid/meeting/17ME-S2/papers/Article_No_13.pdf
[2] https://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1876-03.pdf
[3]

[4]
代数幾何と学習理論 (知能情報科学シリーズ)

代数幾何と学習理論 (知能情報科学シリーズ)

  • 作者:渡辺 澄夫
  • 発売日: 2006/04/27
  • メディア: 単行本(ソフトカバー)
[5]
量子アニーリングの基礎 (基本法則から読み解く物理学最前線 18)

量子アニーリングの基礎 (基本法則から読み解く物理学最前線 18)

[6] https://arxiv.org/pdf/1810.01440.pdf
[7] https://arxiv.org/pdf/1912.08314.pdf
[8]
グレブナー道場

グレブナー道場

  • 発売日: 2011/09/23
  • メディア: 単行本
[9] https://mlai.cs.huji.ac.il/publications/Amir_Globerson/files/Vanishing%20Component%20Analysis.pdf

ガンマ分布の様々な期待値

{\displaystyle \lambda,k}を母数とするのガンマ分布は{\displaystyle \frac{{\lambda}^k}{\Gamma(k)}x^{k-1}e^{-\lambda x}}と表される。この分布の様々な期待値を計算してみよう。

 

まずは平均{\displaystyle E(x)}である。

 {\displaystyle E(x)=\int^{\infty}_{0}dx \frac{{\lambda}^k}{\Gamma(k)}x^{k}e^{-\lambda x}=\frac{k}{\lambda} \int^{\infty}_{0}\frac{{\lambda}^{k+1}}{\Gamma(k+1)}x^{k}e^{-\lambda x}=\frac{k}{\lambda} }

ここで、{\displaystyle \Gamma(k+1)=k!=k\Gamma(k)}であること、ガンマ分布の積分が1になることを用いた。

 

次に、分散{\displaystyle V(x)=E(x^2)-(E(x))^2}を求める。

 {\displaystyle E(x^2)=\int^{\infty}_{0}dx \frac{{\lambda}^k}{\Gamma(k)}x^{k+1}e^{-\lambda x}=\frac{k(k+1)}{{\lambda}^2} \int^{\infty}_{0}\frac{{\lambda}^{k+2}}{\Gamma(k+2)}x^{k+1}e^{-\lambda x}=\frac{k(k+1)}{{\lambda}^2} }

これと平均の結果により、分散の表式を得る。

 {\displaystyle V(x)=\frac{k}{{\lambda}^2} }

 

次に、指数関数の期待値を求めよう。

 {\displaystyle E(e^{tx})=\int^{\infty}_{0}dx \frac{{\lambda}^k}{\Gamma(k)}x^{k-1}e^{-(\lambda-t) x}=\frac{{\lambda}^k}{(\lambda-t)^k} \int^{\infty}_{0}\frac{(\lambda-t)^{k}}{\Gamma(k)}x^{k-1}e^{-(\lambda-t) x}=\left(\frac{\lambda}{\lambda-t}\right)^k }

 これは、いわゆるモーメント母関数のことである。

 

最後に、対数関数の期待値を求めよう。

 {\displaystyle E(ln(x))=\int^{\infty}_{0}dx \frac{{\lambda}^k}{\Gamma(k)}x^{k-1}e^{-\lambda x} ln(x)=\int^{\infty}_{0}dx \frac{{\lambda}^k}{\Gamma(k)}e^{-\lambda x} \frac{d}{dk} x^{k-1}}

と変形できる。ここで、{\displaystyle \frac{(x^{k-1})'}{x^{k-1}}=\frac{d}{dk} ln(x^{k-1})= \frac{d}{dk} (k-1)ln(x)=ln(x)}であることを用いた(「'」は{\displaystyle k}に関する微分)。

{\displaystyle E(ln(x))=\frac{d}{ds}\int^{\infty}_{0}dx \frac{{\lambda}^k}{\Gamma(k)}x^{k-1}e^{-\lambda x}  -\int^{\infty}_{0}dx \frac{d}{dk} \left(\frac{{\lambda}^k}{\Gamma(k)}\right)e^{-\lambda x} x^{k-1} }

一項目は、被微分部分が定数1になるため0となる。二項目の微分を実行すると、

{\displaystyle E(ln(x))= -\int^{\infty}_{0}dx \frac{ln(\lambda) {\lambda}^k}{\Gamma(k)} x^{k-1} e^{-\lambda x} +\int^{\infty}_{0} dx  \frac{{\Gamma(k)}'}{{\Gamma(k)}^2} x^{k-1} e^{-\lambda x} =-ln(\lambda)+ \frac{{\Gamma(k)}'}{{\Gamma(k)}^2}}

となる。ディガンマ関数{\displaystyle \psi(x)=\frac{d}{dx} \Gamma(x) }を用いると、

{\displaystyle E(ln(x))=-ln(\lambda)+\psi(k)}

を得る。これを用いるとガンマ分布のエントロピー等が計算できる。また、https://yoshidabenjiro.hatenablog.com/entry/2016/12/30/023546にもあるようにポアソン分布の変分ベイズ法での計算にも登場する。そろそろ統計検定に出題されるかも..

 

異なるネットワークを並列したニューラルネットの構築法

kerasでは、直列でどんどん中間層をつなげていく例はよくあるが、並列で異なるネットワークあるいは中間層をつなげる例はあまり少ないので紹介する。

まずは必要なライブラリのインポートと学習データの構築。0~1の乱数5個でできた入力ベクトルを500回分生成する。出力としては、ベクトルの成分和が5/2より大きくなるなら1、そうでないなら-1とする。

from keras.layers import Input, Dense, Concatenate, Lambda
import numpy as np
from keras.models import Model

data = np.random.rand(500,5)
labels = (np.sum(data, axis=1) > 2.5) * 2 - 1


次にモデルを構築する。入力はもちろん5個の成分のベクトルだが、それを分割して前3つと後ろ2つで異なるネットワークに接続し、その出力を統合してから全結合層を通すモデルを考える。分割はlambdaによる範囲指定、統合はconcatenateを用いるのがミソ。

inputs=Input(shape=(5,))
x1 = Lambda(lambda x:x[:,:3],output_shape=(3,))(inputs)
x2 = Lambda(lambda x:x[:,2:],output_shape=(2,))(inputs)

x1_1 = Dense(20, activation='tanh')(x1)
x2_1 = Dense(20, activation='sigmoid')(x2)
x=Concatenate(axis=-1)([x1_1,x2_1])
y=Dense(1, activation='tanh')(x)

ここで、前3つにはtanh、後ろ3つにはsigmoidを活性化関数とする別々の全結合層を指定した。また、この出力を統合し、tanhを活性化関数とする全結合層を用いた。

次にモデルの学習と、テストデータによる検証を実施する。

model = Model(inputs,y)
model.compile('adam', 'hinge', metrics=['accuracy'])
model.fit(data, labels, epochs=200, validation_split=0.1)

test = np.random.rand(100, 5)
predict = np.sign(model.predict(test).flatten())
real = (np.sum(test, axis=1) > 2.5) * 2 - 1
print(sum(predict == real) / 100.0)

テストデータは、学習データと同様に新たな100個の入力ベクトルを生成することで生成した。

最後に構築したモデルの構成図をpydotを用いて出力しよう。pydot環境は①graphvizhttp://www.graphviz.org/download/からダウンロード→②ダウンロードされたgraphvizのbinフォルダのパスをシステム環境変数に追加→③コマンドブロンプト開きpipによりgraphvizとpydotをインストールの手順でOK。pydotが使用できるようになったら、以下のようにモデルの構成図を画像に出力する。

from keras.utils import plot_model
plot_model(model,to_file="model.png")

f:id:ChunPom:20210415230236p:plain