お産ウィークがありました
お産ウィークとは
お産ウィークとはエンジニア、デザイナ研修の一環で、新卒エンジニアと新卒デザイナが、1週間でWebサービスを協働開発を行います。 新卒エンジニアが5人、新卒デザイナが1人なのでエンジニア3人のチームとエンジニア2人、デザイナ1人の2チームに分かれて開発を行いました。
僕はエンジニア2人、デザイナ1人のチームになりした。
作ったもの
お産ウィークではチームにそれぞれテーマが与えられ、そのテーマに沿ったwebサービスを開発します。 僕のチームは「旅行の思い出をもっと残せるサービス」というテーマが与えられました。
チームであれこれ話し合ったり、方向転換したりしながらなんとか動くサービスを作れました。(イケてない仕様だったりバグも多く見れらますが...)
反省
最初にサービスの方針を決める段階でチーム内だけで盛り上がってしまい、自分たちが考えたサービスを客観的に見ることができませんでした。その結果、お産ウィーク3日目で「あれ、このサービスを使いたい人っているのかな?」と疑問が出て、結局サービスの方針を練り直しますことになりました。サービスの方針を練り直すと今度はメインの機能を作り直すことになり時間に追われることになりました。
結果論かもしれませんが、サービスの方向性が決まった時点でチーム外の誰かにサービスの方向性についてレビューしてもらってたら後戻りすることもなくもう少し機能の部分を詰めたり、バグを潰したり出来なのかなと感じます。
最後に
とはいえ、サービスを動く状態にできたのは良かったです。また、同期のエンジニアやデザイナもすごい人ばかりだなと実感することができました。 祝日を挟んで木曜日からモバイル研修が再開します。そちらも頑張っていきたいです!
完全独習 ベイズ統計学入門を読んだ
- 作者: 小島寛之
- 出版社/メーカー: ダイヤモンド社
- 発売日: 2015/11/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
この本のコンセプトは四則演算のみでベイズ推定を基本を理解するところにある。 第1部は確率を長方形の面積に見立て、確率記号を一切使わずに設定した問題に対してベイズ推定を行っている。 本当に簡単な四則演算のみでベイズの更新や事後確率の意味、逐次合理性、従来の統計学(ネイマン・ピアソン統計学)との違いなどが説明されている。
第2部では、より汎用的に推定を可能にするために確率分布を用いた推定方法が解説されている。まずは、ベータ分布と正規分布などのよく利用される確率分布の説明から始まり、問題に対して確率分布を選択するために「共役事前分布」の説明を行って最後に実際に確率分布を用いた推定を行う、という流れだった。 さすがに、確率分布の導入あたりから四則演算のみでは説明が難しく、多くの結論を天下り的に与えている。 しかし、冒頭で作者が
完璧に解説しようとすると大学レベルの微分・積分が必要になってしまいます。 ... そこで本書ではやむなく、これらの解説は簡易的に済ませることにしました。
や
完璧な理解を欲する人も、本書を読んでから専門書に挑戦したほうが得策だと思います。
と述べているように、この本の目的は厳密な理解ではなく、ベイズ統計学を勉強する足がかりとなることだと思う。 そういう意味では、僕のような全くない人がベイズ統計学とは何なのかということを知るためには最適な本だと思う。
次はこの本の文献にもあった「入門ベイズ統計学」を読みたい。
フィットネスジムに入会した
最近、地元の友人に会うたびに必ずと言っていいほど「太った?」または「ハゲた?」と言われます。「ハゲた?」の方は遺伝っぽいのでどうしようもないが、「太った?」の方は改善する余地がある。
実際に体重測ってみると、高専で一番痩せてた時期より10kg以上太ってるし、上京してからも4kg以上は太ってました。
ということで、痩せるためにフィットネスジムに入会しました。
フィットネスジムの選び方
選び方というか家から歩いて通えるという条件は外せないので、家から歩いて通える距離にあるフィットネスジムを探してみるとエニタイムフィットネスというジムしか見つかりませんでした。
選択肢こそなかったものの、このエニタイムフィットネスといジムは一ヶ月7000円で好きな時間に通い放題というなかなか好条件のジムでした。
他のジムだと、好きな時間に通い放題のプランだと軽く1万円は超えてきます。
安い代わりにプールとかは付いてないが、元々、プールに入る予定はなかったしマシン類は充実しているので問題はないです。ラッキー
目標
目標体重を決めるのも良いかと思ったけど、そもそも運動続けてると脂肪は減るが、筋肉も付いてくるので、体重の増減に一喜一憂するのもなんか違うなと思います。
なので、まずはゆるーく週2回ジムに通うという事を目標に頑張ります。
まだ、入会して2週間くらいしか経ってないですが、今のところ、週3くらいのペースで通えてます。
当初はダイエット目的でジムに入会しましたが、実際に通ってみると体を動かすことで良いストレス発散にもなっています。
この調子でどんどん痩せていきたいです。
ベイズの定理のお勉強
機械学習の基礎中の基礎であるベイズの定理について少し勉強していきます。
ベイズの定理
ベイズの定理とは、みんな大好きWikipedia先生によると
ベイズの定理(ベイズのていり、英: Bayes' theorem)とは、条件付き確率に関して成り立つ定理で、トーマス・ベイズによって示された。
なおベイズ統計学においては基礎として利用され、いくつかの未観測要素を含む推論等に応用される。
ベイズの定理 - Wikipedia
らしいです。ベイズの定理は機械学習における重要な概念です。機械学習系の参考書を読むと必ず出てくる言葉なので、ベイズの定理を理解することは機械学習を学ぶ上での最初の第一歩なのでは?と考えています。
ベイズの定理は次の式で表されます。
ここで、を事後確率、を尤度、、を周辺確率、を事前確率と呼びます。
この式は、
何も情報がない状態では事象が発生する確率は(事前確率)である。しかし、事象を観測した時、この確率は尤度と周辺確率の比()で修正されになる。
と解釈できます。
3人の囚人問題
式だけではいまいちイメージが湧きにくいので、
理解を深めるために3人の囚人問題をベイズの定理に当てはめて考えてみたいと思います。
ある監獄にX、Y、Zという3人の囚人がいて、それぞれ独房に入れられている。罪状はいずれも似たりよったりで、近々3人まとめて処刑される予定になっている。ところが恩赦が出て3人のうち1人だけ助かることになったという。誰が恩赦になるかは明かされておらず、それぞれの囚人が「私は助かるのか?」と聞いても看守は答えない。
囚人Aは一計を案じ、看守に向かってこう頼んだ。「私以外の2人のうち少なくとも1人は死刑になるはずだ。その者の名前が知りたい。私のことじゃないんだから教えてくれてもよいだろう?」すると看守は「Bは死刑になる」と教えてくれた。それを聞いた囚人Aは「これで助かる確率が1/3から1/2に上がった」とひそかに喜んだ。果たして囚人Aが喜んだのは正しいか?
3囚人問題 - Wikipedia
問題を整理していきます。
最初の時点では3人とも助かる確率は等しいので、「Xが助かる」という事象をAX(Alive X)とすると、事象AXが発生する確率は
となります。これが事前確率です。
次に囚人Xは看守に「私以外に死刑される者の名前を知りたい」と言って看守は「Yが死刑になる」と答えています。
このやりたとり(事象)が発生したことでXが助かる確率は変わってきそうですね。
看守が「Yが死刑になる」と答える事象をDY(Dead Y)とします。
Xが看守に「私以外に死刑される者の名前を知りたい」と聞いたとき、看守がとりうる選択肢は
- 「Yが死刑になる」
- 「Zが死刑になる」
の2つです。
よって、事象DYが発生する確率はとなります。
最後にXの恩赦が決定している場合に看守が「Yが死刑になる」と答える確率、を考えます。
こちらも、看守のとりうる選択肢は
- 「Yが死刑になる」
- 「Zが死刑になる」
の2つなので、です。
必要な情報がそろったので、Xが助かる確率が本当に上昇したのか確かめてみます。
今回知りたい情報は、事象P(DY)を観測した時に囚人Xが助かる確率です。
整理した情報をベイズの定理に当てはめます。
なんと、看守が「Yが死刑になる」という前後でXが助かる確率は変化していませんでした。
囚人Xはぬか喜びだったことになります。
rubyで単純パーセプトロン
目的
機械学習を勉強するにあたって単純パーセプトロンから入るのは通説らしいので、僕も単純パーセプトロンから機械学習を入門します。
理論を勉強しつつ、実際に実装してみることで理解を深めることが目的です。
注意
学習中であるため、この記事に書かれている内容の正しさは保証しません。
間違っている箇所を見つけたら指摘していただけると幸いです。
識別関数
識別関数とは何らかのデータを特定のクラスタに識別する関数です。
例えば、次のようなデータを考えます。
青色のデータと赤色のデータの間に直線を引くことでデータを識別できそうです。
実際に直線を引いてみます。
直線より上側にあるデータが青色のデータ、下側にあるデータが赤色のデータと識別することができました。
これを式で表してみます。
直線を式で表すと
になります。
直線より上側は青色のデータ、下側は赤色のデータなので
青色のデータは
となり、赤色のデータは
となります。
直線の傾きや切片を決定する
が決まれば直線が一意に決まります。
今回はこの直線が識別関数となります。
単純パーセプトロンではこの
を学習によって求めます。
単純パーセプトロンによる学習
単純パーセプトロンについてのおさらいです。
単純パーセプトロンは複数の入力を受け取り、値が何らかの値に達すると発火する識別器です。
雑に図で表すとこんな感じです。
この図に先ほどの識別関数を当てはめてみます。
この図を式で表します。
を重みと呼びます。
次に実際に学習方法を考えます。
学習の方法は
- 重み()にランダムな値を設定する
- 学習データをパーセプトロンに投げ、出力が正しいか比較する
- 出力が間違っていれば、重みを更新する
- 重みの更新が収束するまで2〜3を繰り返す
重みの更新
学習データを読み込み出力結果が間違っていれば重みの更新を行います。
重みの更新は、正しい結果を出しそうな方向に少しづつずらしていきます。
この「重みを正しそうな方向に少しづつずらす」ために誤差関数というものを定義します。
誤差関数とは、「予測した結果が実際の結果とどのくらいずれているか」を出力する関数です。
誤差関数はずれが大きいほど大きな値を返すのであればどのような関数でも大丈夫ですが、
単純パーセプトロンの場合、誤差関数は
と定義する場合が多いようです。
※はデータの正解ラベルで正解の場合を不正解の場合となります。
この誤差関数をグラフで表してみます。誤差関数は「正解とのズレが大きいほど大きな値を返す」という特性から、
2次関数のようなグラフを描きます。
重みの更新は最終的にこのグラフでいう極小値を目指します。
では、どうすれば極小値に近づくように重みを更新でききるのでしょうか。
傾きを見て、傾きが負の場合正の方向へ、傾きが正の場合負の方向へ重みをずらしていけば、
重みを極小値へ近づけていけそうです。
これを式で表してみます。
このままだと、の値が大きくなりすぎるので、調整するために
学習率をかけてあげます。
この式を展開していきます。
ここで、の場合は更新自体を行わないので、についてのみ考えます。
よって更新式は
となります。
rubyで実装
理解を深めるためにrubyで実装しました。
グラフの描画はgnuplotを使っています。
以下コードと実行結果となります。
GitHub - ogidow/Simple-perceptron-ruby
require "gnuplot" # w1 + w2x + w3y = 0 class Perceptron def initialize(learning_rate, num_data) @w_vec = {} @learning_rate = learning_rate @num_data = num_data end def init_w_vec @num_data.times do @w_vec = {w1: rand(-10..10), w2: rand(-10..10), w3: rand(-10..10)} end end def predict (data) #p w_vec @w_vec[:w1] * 1 + @w_vec[:w2] * data[:x1] + @w_vec[:w3] * data[:x2] end def update (data) @w_vec = {w1: @w_vec[:w1] + @learning_rate * 1 * data[:label], w2: @w_vec[:w2] + @learning_rate * data[:x2] * data[:label], w3: @w_vec[:w3] + @learning_rate * data[:x1] * data[:label]} end def train (datas) update_count = 0 datas.each do |data| result = predict(data) if result * data[:label] < 0 update(data) update_count += 1 end end update_count end def draw_graph(x1, y1, x2, y2, title) Gnuplot.open do |gp| Gnuplot::Plot.new(gp) do |plot| plot.xlabel "x" plot.ylabel "y" plot.title title plot.data << Gnuplot::DataSet.new([x1, y1]) do |ds| ds.with = "points" ds.notitle end plot.data << Gnuplot::DataSet.new([x2, y2]) do |ds| ds.with = "lines" ds.notitle end end end end def run #学習用データ作成 init_w_vec datas = [] @num_data.times do if rand > 0.5 datas.push({x1: rand(1..100) * -1, x2: rand(1..100) * 1, label: 1}) else datas.push({x1: rand(1..100) * 1, x2: rand(1..100) * -1, label: -1}) end end ##学習開始 ##収束条件:重みの更新がなくなったら update_count = 0 5000.times do update_count = train datas break if update_count == 0 end # w1 + x * w2 + y * w3 = 0 # 分離直線の傾きと切片を求める slope = -1 * @w_vec[:w2] / @w_vec[:w3] interecept = -1 * @w_vec[:w1] / @w_vec[:w3] #学習した分離直線を出力 puts "y = #{slope}x + #{-1 * interecept}" # 学習した分離直線を描画 x =[] y =[] (-100..100).each do |i| x.push i y.push i * slope + interecept end draw_graph(datas.map{|v| v[:x1] }, datas.map{|v| v[:x2]}, x, y, "perceptron") end end perceptron = Perceptron.new(0.2, 100) perceptron.run
見事に分離直線を引くことができました!!
アンテナサイト作った話
同期のブログのアンテナサイト作りました
http://six-antena.herokuapp.com/
作った経緯
飲んだ勢いで、同期の一人に「同期ブログのアンテナサイト作るぜ!!!!!1」
と宣言したのがはじまりです。
環境
言語 :ruby
フレームワーク:ruby on rails
インフラ :heroku
機能
データベースに登録されている同期のブログの更新情報がトップページに表示されます。
表示される内容は、各記事のタイトル、og:imageに指定されている画像とdescriptionと呼ばれる記事の概要が表示されます。
また、descriptionのない写真ブログからも記事を取得しているので、その場合はタイトルと画像のみが表示されます。
困っていること
アンテナサイトなので定期的にデータベースを更新しなければなりません。
herokuでタスクの定期実行を行う場合、「heroku Scheduler」というサービスを利用することで
実現できます。「heroku Scheduler」はプロセスの 利用時間が750時間/1ヶ月まで無料で利用することができますが、
750時間を超えると課金対象になるので、「heroku Scheduler」を利用するにはクレジットカードの登録が必須となります。
しかし、僕はクレジットカードを持っていないので「heroku Scheduler」を利用することができません。
そのため、手動でデータベースの更新をやってます。
何か良い方法があれば教えてください。
これから
機能の追加・修正と見た目を良い感じにしたいです。
GMOペパボに入社しました
ペパボ新卒6期生として入社したのおぎどーです。 そろそろ入社して1ヶ月がたち落ち着いてきたので入社エントリというものを書いてみます
だれ
沖縄高専の専攻科で情報工学を学んだ22歳の若者です ドローン飛ばしたりしてました
ペパボとは
ペパボは「もっと面白くできる」を企業理念としている本当に面白い会社です。
以下の動画見るとペパボの面白さを何となく理解していただけるかと思います
新卒採用2017 GMOペパボ会社説明会
なにやってるの
入社式を終え、すぐにグループ全体研修に入りました。そこでは、各グループの社長さんのお話やマナー研修、宿泊研修などを受けました。 その後、ペパボの研修に入り各部署のオリエンテーションを受け、現在はポートフォリオ研修で自分のこれまでをふりかえっている最中です
これから
5月は福岡研修でそれが終わると技術研修が始まります。研修はまだまだこれからなので、一人前のエンジニアになれるよう頑張って行きたいなという感じです。 また、研修を受けて技術の知識だけじゃなくデレクションやデザインも学びたくなったので、先輩や同期に助けもらってどんどん学んでいくぞ!!!!11という気持ちですので、各位よろしくお願いします
終わりに
ペパボは研修も充実してて、エンジニアのスーパープレイヤーも多く在籍してます!!
17年卒の採用も始まってるみたいなんで興味ある方は是非!!!
新卒採用2017-GMOペパボ株式会社