読者です 読者をやめる 読者になる 読者になる

kasajeiのブログ

機械学習と健康が最近の関心事です

Googleでのマインドフルネスプログラム「Search Inside Yourself」の本

マインドフルネス

サーチ・インサイド・ユアセルフ――仕事と人生を飛躍させるグーグルのマインドフルネス実践法

サーチ・インサイド・ユアセルフ――仕事と人生を飛躍させるグーグルのマインドフルネス実践法

  • 作者: チャディー・メン・タン,ダニエル・ゴールマン(序文),一般社団法人マインドフルリーダーシップインスティテュート,柴田裕之
  • 出版社/メーカー: 英治出版
  • 発売日: 2016/05/17
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Googleでマインドフルネスのプログラムがあると知ってからとても興味を持っていたSearch Inside Yourselfの翻訳本がついに発売されました

「この本とプログラムはグーグルの文化の最高の部分を表しています」 ――エリック・シュミット(グーグル会長)

とエリック・シュミットもお墨付きです。

また、EQ こころの知能指数の著者であるダニエル・ゴールマンが序文を書いています。

なぜGoogleの社員は、楽しく創造的に働き、柔軟性を持ち、優れた成果を上げられるのか? その鍵を握るのが、独自の研修プログラム「サーチ・インサイド・ユアセルフ(SIY)」。

序文ではGoogleで公演したときの話も書いてあり、面白かったです。

Googleで実践され、生産性を20%向上させたと言われているプログラムの本で、内容満載です。

マインドフルネスの考え方や、実践されている瞑想のやり方も書いてあります。

Googleのこのような取り組みはとても面白いですね。

優秀な人材を採用することもさることながら、こういった取り組みによってさらに生産性を向上させていく。

さらにプログラムとして作り上げ、公開していくというのも良いですね。このプロジェクトを推進しているメンがエンジニアというもの面白い。

Googleの本はどれも面白い。おすすめです。

サーチ・インサイド・ユアセルフ――仕事と人生を飛躍させるグーグルのマインドフルネス実践法

サーチ・インサイド・ユアセルフ――仕事と人生を飛躍させるグーグルのマインドフルネス実践法

  • 作者: チャディー・メン・タン,ダニエル・ゴールマン(序文),一般社団法人マインドフルリーダーシップインスティテュート,柴田裕之
  • 出版社/メーカー: 英治出版
  • 発売日: 2016/05/17
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Djangoのauto_nowなのにアップデートされないことがある

Python

Djangoのモデルには、DateTimeFieldがあり、その引数として、

  • auto_now_add : create時に現在時刻を入れる
  • auto_add : save時に現在時刻を入れて更新する

という便利な機能があります。よく

class User(models.Model):
     name = models.CharField()
     created = models.DateTimeField(
        auto_now_add=True
     )
     updated = models.DateTimeField(
        auto_now=True
     )

のような形で定義して、使っています。

auto_nowで更新される

このようなフィールドを持ったモデルで

user = User.objects.create(name="kasajei")
print(user.created)
>>> 現在時刻
print(user.updated)
>>> 現在時刻
user.name = "kasajei2"
user.save()
print(user.updated)
>>> 保存した時刻

となり、updatedには現在の時刻を設定して、saveしなくてもDjangoが値を入れて更新してくれます。便利!

auto_nowなのに、更新されない

しかし、たまーに、更新されないなぁと思っていたら、以下の用に、updateで引数を指定するようなケースでは更新をしてくれないみたいです

user.name="kasajei3"
user.save(update_fields="name")
print(user.updated)
>>> 更新されてない!!

他にも、

User.objects.filter(name="kasajei").update(name="kasajei2")
user = User.objects.get(name="kasajei2")
print(user.updated)
>>> 更新されてない!!

なども更新されません!

ちゃんと発行されているSQL見ればわかるのですが、auto_nowを信用しすぎていて、しばらく気づきませんでした。

auto_nowなんだから、更新してくれてもいいのになぁなんて、思ったりしますが、どうなんでしょう。

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

AjaxアプリケーションでもDjango Debug Toolbarを使いたい

Python

最近のサービス構成

最近作ってるサービスでは

  • APIサーバー[Django]
  • Web, iOS, Android

のように構成することが多く、Djangoはjsonを返すAPIサーバーとして使うことが増えました。

Django Debug Toolbarが不便である

すると、Djangoで便利だった、Django Debug Toolbarが、便利には動かないのですね。(Django Debug Toolbarは各APIでのパフォーマンスを知ることができる便利なデバッグツールです。SQLの履歴が出るので、主にこれを見ています)

github.com

もちろん、各APIのURL叩けば動いてくれますが、JSONが表示させるだけなので、

  • 何のViewかわかりづらい
  • POSTがめんどくさい
  • ユーザー認証が面倒くさい

などという問題があります。

続きを読む

ざっくりわかる機械学習

機械学習

機械学習は統計学的な手法から発展してきたこともあり、ベイズの定理による確率論的な定式化が一般的である。しかし、最近流行りのディープラーニングなどを理解しようと思うと、決定論的な立場から定式化しておくほうがわかりやすいと思われる。

僕はこのように理解しているという感想記事です。わかりやすいかはわかりませんが、ざっくりはわかると思います。

教師あり学習の定式化

教師学習とは  {f: \mathbb{R}^{n}→\mathbb{R}^{m}} : 関数に対して、  {\mathbb{D} \subset \mathbb{R}^{n}} : 学習データ上の値が与えられた時、

 {\mathbb{F}:\mathbb{R}^{n}→\mathbb{R}^{m}} : 関数族(モデル)と {Cost:\mathbb{R}^{m}\times \mathbb{R}^{m}→\mathbb{R}} : コスト関数を選び、

コスト関数の総和

 { \displaystyle
 \sum{}_{x_{i} \in \mathbb{Y}}Cost( f(x_{i}), f^{*}(x_{i}))
}

を最小化(*アルゴリズム)し、かつ任意のテストデータ {\mathbb{T} \subset \mathbb{R}^{n}}に対しても、

 {\displaystyle
 \sum{}_{x_{i} \in \mathbb{T}}Cost( f(x_{i}), f^{*}(x_{i}))
}

が最小となる(*汎化性)ような、 {f^{*}\in\mathbb{F}} を選ぶことである。

と定式化してみる。これにより、なにがヒューリスティックに選ぶべきもので、なにがアルゴリズムなどで行うものなのかが明確になり、どこの議論をしているのかがわかりやすくなると思う。

回帰と分類

 {f}の値域が {\mathbb{N}}の有限部分集合であるとき分類と呼ぶ。それ以外を回帰と呼ぶ。

としておいたほうがわかりやすそう。Wikipediaには値域が連続値って書いてあるけど、階段関数のような非連続な関数に対しても機械学習は行われるはずで、それは分類とは呼ばないはずなので、このように定義しておくのが無難だと思う。

モデルについて

モデルの種類はさまざまである。モデル選びはヒューリスティックであり、学習データや関数によってここを上手く選ぶことが重要である。

モデルとして、線形写像を選べば、線形回帰と呼ばれたり、パーセプトロン(線形での分類)と呼ばれたりする。線形なので、線型写像の近似か、超平面での分類しかできない。

またニューラルネットワークや多層パーセプトロンやCNNやRNNなどもモデルの名前である。これらは素子の数を十分増やせば任意の関数を近似できることが知られている。

どの問題に対して、どのようなモデルが最適化はさまざまな研究がなされているので、機械学習を使う側としてはここの流れを追いかけるのが面白いところである。やってみた!系の記事はどのデーターに対してどのモデルでどのような結果が出たかを見ると良いと思う。

コスト関数について

モデルによってや、問題によって使うコスト関数は変わる。回帰の場合は二乗誤差が使われることがおおく、分類の場合にはクロスエントロピーを使われることが多い。

値域に対して、どのような距離空間を入れるかという話と、学習がしやすいような関数にできるかと言う話がある。

たとえば二乗誤差は直感的にわかりやすい距離であり、またパラメーターが線形の場合は下に凸の関数なので、極小値があることがわかっているので学習に使いやすい。

クロスエントロピーは0付近で無限大の値を取るので、答えを間違った時のペナルティが大きく学習のスピードが早い。

特殊なことをしないかぎりは上記の2つを使うのが良いと思う。(と言いつつ、それ以外を僕はあまり知らない)

コスト関数の最小化について

(*アルゴリズム)のところの話である。ここは主に与えられたデータからどのようにして最適な{f^{*}}を最速で探すのかが議論になる。

さまざまな方法が提案されており、最急降下法や確率的勾配法やミニバッチ。まだニューラルネットだとバックプロパゲーションやAdaGradやAdamなどが発明されている。

この分野はアルゴリズムが好きな人は追いかけるとよいと思う。機械学習初心者はここを理解しようとすると大変なことになるので、最急降下法ぐらいを「構成している関数の各パラメーターで偏微分してその値の逆方向にパラメーターをすすめることで、コスト関数の極小値にたどり着くんだろうなぁ」ぐらいの感覚として理解しておくぐらいにとどめ、あとは便利だなぁぐらいでいいと思う(といって僕は逃げます。僕もちゃんとは勉強してないのでわからない。)

汎化性について

汎化性とは、任意のテストデータに対しても、コスト関数が小さくなっていることであり、これはつまり予想が上手く行っている!ことを表す。

ここが機械学習で一番厄介で、理論的に話をすすめるのが難しく、しかし重要なところである。

まず、汎化性には

  • モデルの選定
  • コスト関数の選定
  • 過学習の問題
  • 学習最適化

が主な議論対象となる。モデルとコスト関数に関しては上記で見たので過学習と学習最適化について取り上げる

過学習

学習データが少ない時に表現力が高いモデルを選んだ時に起こりがちなのが過学習である。

たとえば、学習データーが5つの点の値のみ与えられていて、モデルを4次元の多項式とすると変数は5個あるので、連立方程式を解くことができ、学習データに関しては完全にフィットすることができてしまう!

これに対する対策として様々なテクニックが考えられており、例えばL2正則化もそれに当たる。これはパラメーターに対して、値を大きくなり過ぎないという制限をつけることで過学習を防ぐことを目的としている。

ほかにはニューラルネットワークではドロップアウトと言われる手法が知られており、これは各素子が50%などの確率で不活性化することにより過学習を防いでいる。

また学習データに対してランダムなノイズをのせることで過学習を防いだりしている。

学習最適化

コスト関数を最小化することは上手くいくが未知のデータに対してうまくいかないことも多い。それが過学習によって成されるケースもあるが、例えばニューラルネットだと各層での役割分担が上手く行っておらず特徴を抽出しきれてないというケースもある。

そこで事前学習を行いパラメーター空間を整理しておくことで、学習を上手くいかせる手法も考えられている。このとき多くは教師なし学習で行われる。

これがディープラーニングの転機になったRBMやAutoencoderによる事前学習である。

データの前処理

機械学習で重要なのは、データセットを上手く作れるかというところが最終的には一番の問題になったりする。大体のローデータは汚いので、それを学習するために綺麗に整えないといけない。また教師あり学習をするときには教師データが必要で、それを準備するのも大変だったりする(エンジニアが大量のネイル画像を分類しなければいけない!)

ここに関してもデータの正規化などでデータを綺麗にしたり、学習データを回転したりノイズをのせることで学習データを増やしたりしている。

まとめ

教師あり学習を決定論的に定式化してみた。すると機械学習ででてくるワードがどこの部分に対しての話なのかが少し明確になったのではないでしょうか。

僕だと、機械学習を使う方に今は興味があるので、モデルの選定や汎化性やデータの前処理に興味があるのでここに関してはある程度理解し、アルゴリズムなどに関しては、Scikit LearnやTensorflowやChainerなどに任せてしまおう!と思うことができる。(後々学びたいとは思っている)

「巨人の肩の上に立つ」じゃないけど、得意なことややれることは人それぞれで、時間も有限なので、効率的に楽しいことをやっていきたい!

その一助になればとお思い、ちょっとざっくりですが、機械学習について説明してみました。そして僕の理解はこんなもんです。

まだまだ機械学習やり始めて間もないので、いろいろ教えていただきたいです。

計測してないものは改善できない!時間の管理を考えてみた

マインドフルネス

「早起き」の技術という本を読んで、時間を有効に使おう!という意識が芽生えたので、いろいろ調べて実行してみています。

計測してないものは改善できない

一日のうち自分のやりたいことにどれぐらい時間をさけていますか?と質問に対してなんと答えられるでしょうか?

僕は、実際どれぐらい時間を使っているのかわからない!としか回答できないことに不安を感じました。

仕事中もどれぐらい何に時間を使っているのかがわからないと、仕事内容も改善のしようがありません。

もっと本を読む時間を増やしたかったり、友達と飲みに行く時間を増やしたい。しかし、なんとなく忙しい気がする。けど何に忙しいのかわからない、という状況でした。そうすると改善の余地もありません。

「計測してないものは改善できない」とはまさにこのことです。

成功のための9ステップという本には、経営者に「何時間重要な時間を過ごせていますか?」と聞くと「1日の半分以上重要な時間だ」と応えるみたい。しかし、そもそも時間を測ってもいないのにわかるはずがない!と書いてあって、計測の重要性を思い知りました。

続きを読む

明るすぎ!?睡眠の質を高めるために、光について考えよう

マインドフルネス

普段何気なく使っている光ですが、実は明るすぎて睡眠の質を下げている要因になっているかもしれません。今回は光を改善することで、睡眠の質を改善しましょう!

寝る前に間接照明で光量を落とす

シーリングライトは寝る前の光としては明るすぎます。寝る前には間接照明を使って光量を落としましょう。

IKEAのプロアランプがオススメです。僕は40Wの電球で使用しています。

本を読むには十分な光量なので、お風呂上がってからは、間接照明のみにしています。

続きを読む

良いまとめ!最高の仕事をするためにコンディションを整える方法

マインドフルネス


「はたらく人のコンディショニング事典」という本を読んだ。

最高の仕事は、最高のコンディションから生まれます

「最高の仕事は、最高のコンディションから生まれます」から始まるこの本。最近の個人的なテーマとぴったりで読んでいて楽しかった。

著者も、脳科学者/医学博士と管理栄養士との共著になっており、信頼性もある。

ブログっぽい書きっぷりで読みやすく、面白い。表紙の印象とは違い、中身はポップな印象。イラストもあったりしてわかりやすい。

健康法のまとめ的な本

内容もかなり良い。栄養学的なことからマインドフルネスなどの最近の話題まで、様々な観点から、よくまとめられていて、とても参考になった。健康に気を使い始めたけど、どこからスタートしたらいいのかわからない人にとっては良いスタート地点だと思う。巻末にある、参考文献も参考になる。

習慣化すること

この本の副読本として、「自分を変える習慣力」がおすすめされている。

例えば、「はたらく人のコンディショニング事典」には

  • 有酸素運動をする
  • マインドフルネスのための瞑想をする

など、健康に良さそうなことは知っているが、なかなか日常生活として習慣化できてないことが書いてある。

やはり実践が大切なので、「自分を変える習慣力」を読んで習慣化していこうと思った。Amazonで買おうと思ったら人気みたいで、在庫切れ。早く読みたい。

最初の一歩にとてもオススメ

「はたらく人のコンディショニング事典」は最高のコンディションのために必要なことがまとめ的に書いてありおすすめです。