Twitterのブックマークレットを更新した

普段からTwitterのリンクのシェアは確か公式の以下をブックマークレットを利用していたんですが、先程書いたWEB+DB PRESS Vol.100 - n3104のブログをシェアしようとしたらタイトル部分が表示されない状態になってました。

javascript:(function(){window.twttr=window.twttr||{};var D=550,A=450,C=screen.height,B=screen.width,H=Math.round((B/2)-(D/2)),G=0,F=document,E;if(C>A){G=Math.round((C/2)-(A/2))}window.twttr.shareWin=window.open('//twitter.com/share','','left='+H+',top='+G+',width='+D+',height='+A+',personalbar=0,toolbar=0,scrollbars=1,resizable=1');E=F.createElement('script');E.src='//platform.twitter.com/bookmarklets/share.js?v=1';F.getElementsByTagName('head')[0].appendChild(E)}());

調べてみたところ、どうもTwitterの公式サイトからブックマークレットに関するページ自体が削除されており、前述のブックマークレットで利用している//platform.twitter.com/bookmarklets/share.js?v=1にアクセスできない状態になっていました。

ブックマークレットは利用したいので検索したらツイートボタンがないページでもツイート画面を開くブックマークレット - Qiitaが見つかりました。そのまま利用でもよかったんですが、「What’s happening?」よりは元々の「Share a link with your followers」の画面の方が自然かなと思ってTweet Button Parameter Reference — Twitter Developersを見つつ、若干いじりました。

ということで、以下のブックマークレットになりました。今後はこちらを使っていくつもりです。

javascript:(function(){var w=550,h=420;window.open("https://twitter.com/share?text="+encodeURIComponent(document.title),"_blank","width="+w+",height="+h+",left="+(window.innerWidth-w)/2+",top="+(window.innerHeight-h)/2+",scrollbars=yes,resizable=yes,toolbar=no,location=yes")})()

WEB+DB PRESS Vol.100

WEB+DB PRESS Vol.100

WEB+DB PRESS Vol.100

同僚の以下のツイートを見かけて、確かに最近読まなくなったので久しぶりに読みました。

久しぶりに読んだんですが、とてもよかったです。特集は以下の3つでしたがどれも読み応えがありました。

  1. 作って学ぶ人工知能 ── 自然言語処理機械学習、深層学習がまるわかり!
  2. 対応必須! 完全HTTPS化 ── 移行手順からつまずくポイントまで
  3. メルカリ開発ノウハウ大公開 ── ぜんぶ見せます! 1日100万出品のフリマアプリの舞台裏

また、100号記念選書と100号記念エッセイもおもしろかったです。

作って学ぶ人工知能 ── 自然言語処理機械学習、深層学習がまるわかり!

レトリバの方が4章に分けて人工知能の概要、自然言語処理(前処理)、SVM(教師あり学習)とトピックモデル(教師なし学習)によるWikipediaデータの分類、word2vecとGloVeによる単語のベクトル化について説明しています。

機械学習関係の記事は以前読んだ際は「なんとなくわかるような、わからないような。。」みたいな感じでした。ですが、この2年ぐらい勉強を続けたことで「あー、そうそう。おー、ここはこんな感じかー。」みたいな感じで実感を持って読めるようになっていて、自分自身の成長を実感できてよかったです。

対応必須! 完全HTTPS化 ── 移行手順からつまずくポイントまで

クックパッドで既存サイトを完全HTTPS化した際のノウハウの共有記事でした。なぜ完全HTTPS化するかから始まり、HTTPSの実装方法や留意点、リリース手順、完全HTTPS化の影響について説明しています。

CSPやHSTSについて知らなかったのでとても勉強になりました。また、クックパッドさんぐらいの規模になるとどうしても移行漏れが出てきちゃうというのも参考になりました。

メルカリ開発ノウハウ大公開 ── ぜんぶ見せます! 1日100万出品のフリマアプリの舞台裏

メルカリの社内の開発組織や開発環境、言語やテスト、レビュー、リリース、インフラアーキテクチャなどについて説明しています。アプリからサーバーサイド、インフラ、QA、データ分析と一通り紹介されています。

現在私も小規模ながら自社サービスを担当しているので、とても参考になりました。

最後に

AMPは詳細を把握できてよかったですし、SelenideもWebDriverを利用しようか考えていたのでタイムリーでした。全体的に勉強になることばかりでしたし、今後は購読を再開するつもりです。一番の懸念点は読む時間を取れるかでしたが、1ヶ月ぐらいかけて読み切ることができたので隔月なら大丈夫かなと思ってます。

誰がアパレルを殺すのか

誰がアパレルを殺すのか

誰がアパレルを殺すのか

日経ビジネスに広告が出ていておもしろそうだったので読みました。アパレル業界大手の販売が思わしくないとのことで、その理由について業界の歴史や商習慣なども含めて説明しています。また、アパレル業界の常識を打ち破る形で成長している新興勢力についても説明されています。記者の方が書かれていることもあり、文章はとても読みやすかったです。産業としてアパレル業界について学びたい人であれば最初に読んでみるといいと思いました。

日経ビジネスのアパレル業界や百貨店に関する特集記事とも一部内容が重複していたため、半分ぐらいは読んだことがある内容でした。とはいえ、書き下ろしの内容もありますし、一冊の本としてまとまっているので、知識が整理できてよかったです。2章の戦前からのアパレル業界の歴史も俯瞰できてよかったですし、3章のエバーレーンやゾゾタウン、4章のジャパンブルー、メチャカリの事例もおもしろかったです。例えばジャパンブルーの欧米の販路開拓の中で「例えば欧州では小売店間のつながりが強く、オーナー同士が国をまたいで知り合いという場合が非常に多い」みたいな話はおもしろかったです。私自身は服にはあまりお金をかけないというか、ブランドなども全くわからないので、知らないことが多くてそういう意味でも楽しめました。

前々から夏に暑くてTシャツを買いに行ったら長袖が売っていて、冬に寒くて長袖や防寒着を買いに行ったら薄手の春物しか売ってないのが疑問で仕方がなかったのですが、その背景が多少なりとも理解できました。あと、常にセールしてて、定価ってなんだろうという気持ちになってたので、その辺りの問題が解消されるといいなと思います。それと、この本の家電業界版があったら読んでみたいなと思いました。やはり比較することで物事は相対的に捉えられますし、アパレル業界の現状はアパレル業界固有の問題なのかもう少し一般化できる問題なのか知りたいと思いました。

ゼロから作るDeep Learning

読書会の対象書籍となったので読みました。Pythonのコードを実際に動かしながらディープラーニングの基本的な理論について学ぶことができます。具体的にはディープラーニングの理論を理解するために必要なパーセプトロン、活性化関数、損失関数、勾配などの構成要素についてPythonのコード付きで説明しています。そのため、機械学習の前提知識が多少あり、ディープラーニングに興味がある人であれば知識を整理しながら読めるのでおすすめです。

読書会をやっていたこともあり、章ごとに読書メモを作成していました。そのため、詳細については以下のエントリーをご参照ください。なお、1章のエントリーは存在しません。

一通り読み終えてみて、ディープラーニングに対するイメージが具体的になって良かったです。バックプロパゲーションやCNNのちょっとした紹介記事とかをネットで見かけても、よくわからなかったのが本書を読むことで具体的にイメージできるようになりました。また、ディープラーニング自体は他の機械学習の手法と異なり、ディープラーニングという固定的な手法が存在するのではなくてどちらかというとフレームワークと呼ぶのが適切で、具体的な実装として例えばCNNが存在することも理解できました。基本的なことは押さえられたと思うので、今後はもう少し理論面と実践の両方について学んでいくつもりです。

ゼロから作るDeep Learning 8章 畳み込みニューラルネットワーク

前回はゼロから作るDeep Learning 7章 畳み込みニューラルネットワーク - n3104のブログです。

8章はこれまでの章のように理論の詳細について説明するのではなく、ディープラーニング歴史や実用例についての紹介でした。

  • 8.1.1 よりディープなネットワークへ
    • "ディープなネットワークの学習には多くの時間(おそ らく半日以上)が必要になります。"
      • 半日!!!いや、まぁ機械学習の世界ではそれでも短いのかもだけど。。
  • 8.1.2 さらに認識精度を高めるには
    • Data Augmentation(データ拡張)は便利そう。データ集まらないケースもあるからなー。。ただ、画像は分かるんだけど、回帰のように数値を予測するケースだとデータ拡張は適用できるのかなー。。。
  • 8.1.3 層を深くすることのモチベーション
    • "「層を深くすること」の重要性については、理論的にはそれほど多くのことが分かっ ていないのが現状です。"
      • 理論的に説明できないってことであって、応用として精度向上はできてるってことだろうな。
    • "層を深くすることの利点のひ とつは、ネットワークのパラメータ数を少なくできることです。より詳しく言えば、 層を深くしたネットワークは、層を深くしなかった場合に比べて、より少ないパラ メータで同レベル(もしくはそれ以上)の表現力を達成できるのです。"
      • なるほど。パラメータの探索作業を減らせる代わりに学習時間がかかるってことか。
    • "学習の効率性も、層を深くすることの利点のひとつです。これは、層を深くしな かった場合に比べて、層を深くすることで、学習データを少なくでき、高速に学習が 行えることを意味します。"
      • おっと、学習効率も上がるのか。。なら単に層を深くすればいいだけな気がするんだけど。。。問題に対して層を深くしすぎると過学習が起きるリスクはありそうだけど。。
  • 8.2.4 ResNet
    • "しかし、ディープラーニングの学習においては、層を深くしすぎると、学習が うまくいかず、最終的な性能が劣ることも多々ありました。"
      • 層を深くしすぎるトレードオフは学習できないことか。結局、パラメータの探索をやらない代わりにネットワークの深さの探索をやるだけな気もするんだけど。。それとも汎用化出来るものなのかなー。
    • "ここでのポイントは、上流からの勾 配に対して何の手も加えずに、“そのまま”流すということです。そのため、ス キップ構造によって、勾配が小さくなったり(または大きくなりすぎたり)す る心配がなく、前層のレイヤに「意味のある勾配」が伝わっていくことが期待 できます。これまであった、層を深くすることで勾配が小さくなる勾配消失問 題は、このスキップ構造で軽減することが期待できます。"
      • 発想は単純だけど、これで精度向上するんだーw
    • "これは転移学習と言って、学習済みの 重み(の一部)を別のニューラルネットワークにコピーして、再学習を行いま す。たとえば、VGG と同じ構成のネットワークを用意し、学習済みの重みを 初期値とし、新しいデータセットを対象に、再学習(fine tuning)を行います。 転移学習は、手元にあるデータセットが少ない場合において、特に有効な手法 です。"
      • 転移学習なんてのもあるんだ。頭いいなー。。
  • 8.5.4 Deep Q-Network(強化学習)
    • "これは DQN の特筆すべ き点であり、DQN の応用性を格段に高めていると言えます。なぜなら、ゲームごと に設定を変える必要がなく、DQN には単にゲームの画像を与えればよいからです。 実際 DQN は、『パックマン』や『Atari』など多くのゲームを同じ構成で学習するこ とができ、さらに多くのゲームで人を上回る成績を叩き出したのです。"
      • これは凄いよなー。一度モデルを作れば同じ分野の問題にはそのまま流用できてるってことだものなー。

DQNは凄いなーと思いました。ゲームごとに設定を変える必要がないということは、要は同じように業務内容をゲーム画面として表現できる業務があれば、DQNで学習させられるということでしょうから。あとは歴史や実用例を知れておもしろかったです。今後もいろいろと実用化されていくんだろうなーと思いました。

ビジネススクールでは学べない世界最先端の経営学

ビジネススクールでは学べない 世界最先端の経営学

ビジネススクールでは学べない 世界最先端の経営学

日経ビジネスで広告を見かけて「ビジネススクールで学べる経営学は、最先端からかけ離れている!」という煽りがおもしろそうだったので読んでみました。ビジネス書でよく扱われるようなテーマについて、経営学の論文をエビデンスとしてより一歩踏み込んだ解説がされています。それぞれのテーマの結論が「よく言われているのは◯◯だけど実は△△というのが論文で示されています」みたいな感じになっていて、とてもおもしろく読めました。また、文章も特に難しい言葉を使ったりせず読みやすかったです。ビジネス書を読む人であれば読んでみるといいと思いました。

ビジネス書でよく扱われるようなテーマとしては以下のようなものがありました。詳しくは目次を参照してください。

  • ポーターの競争戦略(SCP戦略)とリソース・ベースト・ビュー(RBV)は比較するのではなく、そもそも適用範囲が異なる。具体的には三つの競争の型(IO、チェンバレンシュンペーター)に対応付けることができる。
  • 組織の情報の共有で重要なのは「組織の全員が同じことを覚えていること」ではなく「組織の誰が何を知っているかを、組織の全員が知っていること」である。
  • グローバル化とよく言われるが、大半の企業はホーム地域の売上が半分以上を占めており、本当の意味でグローバル企業と呼べるような企業はほとんど存在しない。
  • 世界はグローバル化もしていないし、フラット化もしていない。
  • ダイバーシティー経営というが、デモグラフィー型の人材多様性は組織のパフォーマンスに影響を及ぼさない。
  • 同族企業は海外でも多いし、業績も悪くない。

本書を読んで改めて手法というのはそれ単体で成り立たず文脈に依存するということを認識できてよかったです。例えるならとりあえず体調が悪くなったら風邪薬を飲むみたいなやり方もあるんでしょうけど、切り傷や打撲に風邪薬を使うのは筋が悪いみたいな感じでしょうか。病気の治療でも症状に合わせて処置を変えるように、ビジネス上の課題も万能な手法はなくて前提に応じて手法を使い分ける必要がありますし、複数の手法を組み合わせる必要があることに気づけました。普段やっているシステム開発だと例えば単体テストのメリット・デメリットや導入する前提みたいなのは分かるんですけど、いわゆるビジネスそのものは経験が少ないので、そんな当たり前のことを認識できていませんでした。そのため、ここ1年ぐらいで読んだビジネス書の中で一番良い本であったと思います。今後も筆者が主張する「思考の軸」を増やせるようビジネス書を読んでいければと考えています。

ゼロから作るDeep Learning 7章 畳み込みニューラルネットワーク

前回はゼロから作るDeep Learning 6章 学習に関するテクニック - n3104のブログです。

7章では画像処理で利用される畳み込みニューラルネットワーク(convolutional neural network:CNN)について説明しています。

  • 7.2.1 全結合層の問題点
    • "全結合層の問題点は何でしょうか。それは、データの形状が“無視”されてしまう ことです。"
      • それが、Deep Learningの売りだと思ってたんだけど。。特徴抽出を考えるようになったら、それは従来手法と差がなくて、そうなると単に予測精度を上げられる代わりにより複雑なモデルとどう向き合うかが求められるようになっただけなのかなぁ。。 ← これは勘違いで7章を一通り読むと分かるけど、縦とか丸とか斜めとかそういう形を抽出するような処理は学習した結果得られるので、そういう意味では従来手法とは異なる。学習がしやすいようにデータに合わせたネットワークの構造にしているだけみたい。
  • 7.2.2 畳み込み演算
    • なるほど。フィルターが重みに相当するのか。
  • 7.2.3 パディング
    • 出力サイズを維持するための手法か。
  • 7.2.4 ストライド
    • フィルターを適用する間隔ね。フィルターという概念を入れたのでそこに選択肢がうまれるのは当然といえば当然か。いやしかし、既にハイパーパラメーターがかなり増えている気がするんだけど。。
  • 7.2.5 3 次元データの畳み込み演算
  • 7.2.6 ブロックで考える
    • 出力を3次元にする場合はフィルター自体をチャンネル数分用意する。これってつまりRGBみたいな感じだと、それぞれに対応するフィルターを用意することでRGBのチャンネルそれぞれに対応したフィルターに学習するってことなのかなー。
  • 7.3 プーリング層
    • "プーリングには、Max プーリングの他に、Average プーリングなどがあり ます。Max プーリングは対象領域から最大値を取る演算であるのに対して、 Average プーリングは、対象領域の平均を計算します。画像認識の分野にお いては、主に Max プーリングが使われます。そのため、本書で「プーリング 層」という場合は、Max プーリングを指すものとします。"
      • 圧縮と言えば圧縮だけど、要は特徴抽出だなー。
  • 7.3.1 プーリング層の特徴
    • 学習ではなくて特徴抽出の1手法ってことだよね。
  • 7.4.2 im2col による展開
    • "なお、図7-18 の図では、見やすさを優先し、フィルターの適用領域が重ならない ように、ストライドを大きく設定しています。実際の畳み込み演算の場合は、フィ ルター領域が重なる場合がほとんどでしょう。フィルターの適用領域が重なる場合、im2col によって展開すると、展開後の要素の数は元のブロックの要素数よりも多く なります。そのため、im2col を使った実装では通常よりも多くのメモリを消費する という欠点があります。"
      • ちょっと唐突で何を言ってるか分からない。先の実装見れば分かるかな。 ← 次節の7.4.3を見ると分かる。要は行列計算出来るようにフィルターの形に合わせて入力データを一部重複する形で変換している。
    • "im2col によって入力データを展開してしまえば、その後にやることは、畳み込 み層のフィルター(重み)を 1 列に展開して、2 つの行列の内積を計算するだけで す(図7-19 参照)。"
      • フィルタも同じように変換して行列計算にするのか。なるほど。最後のreshapeで元に形に戻すのも納得。結局同じ数字の並びをどういうデータ構造で表現してるだけだからなー。
  • 7.4.3 Convolution レイヤの実装
    • "これはフィルター(チャンネル 3、サイズ 5 × 5)の要素 数の総和です。"
      • で、行数が 9 なのは 7 × 7 の画像を 5 × 5 でストライド 1 のフィルターに適用しているので 3 × 3 = 9 になるということらしい。つまりフィルターの形に合わせて入力データを9レコードに変換していて、その際に一部データも重複することもある。
  • 7.4.4 Pooling レイヤの実装
    • np.max で処理できるようにまず im2col 関数でフィルタ単位に変換したデータを reshape してチャンネル単位にしている。なので、レコード数はフィルタの場合のレコード数 × チャンネル数になるはず。
  • 7.5 CNN の実装
    • 重みの初期化が単なるランダムに戻ってる。。CNNの場合の重みの初期値をどうするかは別途説明があるのかなー。
  • 7.6.1 1 層目の重みの可視化
    • 従来手法で自作していたフィルタを学習させることが出来るのがメリットということかな。そういう意味では多層ニューラルネットワークフレームワークであって、処理対象に応じてCNNのように入力データに合わせたレイヤーを選択するって感じかな。そういう意味では多層ニューラルネットワークは利用者側の選択肢が多いので他の手法と同列に扱うのは微妙かも。他の手法だと特徴抽出でとにかく頑張るって感じになるからなー。
    • "それでは、畳み込み層(1 層目)のフィルターを画像として表 示してみましょう。"
      • よくある猫の画像とかもこんな感じでフィルタを図に変換してたってことかなー。
  • 7.6.2 階層構造による情報抽出
  • 7.7.2 AlexNet
    • "ディープラーニング(層を深くしたネットワーク)は、多くの場合、大量のパ ラメータが存在します。そのため、学習には多くの計算が必要であり、さらに、 それらのパラメータを“満足”させるだけの大量のデータが必要になります。 GPU とビッグデータは、それらの課題に光を投げかけたと言えます。"
      • 非常に納得。アイディアを検証できる段階にハードとデータが追いついてきたって感じなんだよなー。 チャンネル

CNNの名前を聞いたことはあったのですが、詳細を知らなかったのでスッキリしました。また、多層ニューラルネットワークフレームワークというか考え方であって、対象領域に応じてCNNのような具体的な手法が存在することも理解できました。後は可視化のところは興味があるので別途リンク先について読むつもりです。

次回はゼロから作るDeep Learning 8章 畳み込みニューラルネットワーク - n3104のブログです。