初心者プログラマがガチムチプログラマを目指すぶろぐ

2017年の春から本格的にプログラミングを学び始めた学生です!よろしければ閲覧、ご指導のほどよろしくお願いいたします!!

webアプリを独力で作る体験をするのだ[vue-cliを使って敗者の環境構築]

Vue.js

React.jsと肩を並べる人気フレームワークで、 React.jsよりも学習コストが低めと聞いて使うことを決めました。

導入

公式ドキュメント

とりあえずチュートリアルでもやろうかなと思い、 公式ページを訪問したら、公式ドキュメントがめっちゃいい感じに流れに沿った解説だったので、 しばらく読み進めることにしました。 しかしながら、手を動かしながらじゃないと楽しくないし、眠くなるので、 先に環境を整えて遊びながらやっていこうと決めました。

環境構築

思ったよりも最高に大変でした。 まずは 単一コンポーネント という概念があるということから難関は始まるのですが、、、

単一コンポーネント

普通にhtmlとjsを分離して、js側にvueを使って書いていく方法と、 .vue拡張子のファイルにhtml, js, css全て詰め込んで部品を組み立てていく方法の 二種類が存在します。 単一コンポーネントの方がvueっぽいし楽しそう! しかもドキュメントが見た所多そう!!(Qiita斜め読み調べ) ということで単一コンポーネントと呼ばれる .vue拡張子を基礎とした書き方でいくことに決めました。

vue-cli

さて、環境構築に入るのですが、 まずはフレームワークのインストールですね。 なんとなくnpmでやればいいかなと思って

npm i -S vue

えい!これで入りました。あら簡単だ! ここまではよかったのですが、今回 単一コンポーネント を扱うため、 ビルドツールが必要とのことです。 Qiitaから察するに webpack が人気そう!ということでwebpackを導入。 webpackの設定をvueのsample repositoryを参照に書いていく。
...ムズイ。
今になって思うとバベルが何かあまりわかっていなかったことが敗因と思われるのですが、 結論から言うと諦めました。

CLI は Node.js および関連するビルドツールに関する事前知識を前提としています。Vue またはフロントエンドビルドツールを初めて使用している場合、CLI を使用する前に、ビルドツールなしでガイドを参照することを強くお勧めします。

公式に上記のように書かれており、 使ってはいけないと思っていた vue-cliと呼ばれるcliツールを使用することにしました。

npm i -g vue-cli
vue init webpack my-project
cd my-project
npm i
npm run dev

まぁ、便利ですよね、そりゃ、 一瞬で環境構築が終わってしまいました。 webpack.configが書けなかった時点で、 ビルド周りの理解はとりあえず後回しにすることを決め、 とりあえずはこのテンプレートのなかでできることを増やしていく方針にしました。 これにて導入は完了?

最初に入って学習すべきもの

babelとは何か

基本的には将来的に実装されることが決まっているが、 ブラウザがまだ対応していないESバージョンを書かせてくれる。 そして、ビルド時によしなに対応させてくれるっぽい。 新しいESまで勉強できて良いかもしれない。 altJSの一つとしてしか認識していなかったため、 勉強するの面倒としか思っておらず避けようとしていたのですが、 触れられてよかったと今は思っています。

webpackの簡単な使い方

vue-cliを使っていれば

# 開発用簡易サーバー起動
npm run dev
# 本番用ビルド
npm run build

さえ覚えていれば、正直大丈夫な気もします。 ただ、configディレクトリに入っている dev.env.jsなどを用いて環境変数を設定できるので、 それらの使い方だけは見ておくと便利かと思います。 自分はbackendのurlをここで分けています。

eslintとは何か

これはつい最近、タイポが多すぎて勉強していたので面くらわずにすみました。 簡単に言うと書き方が汚いと小煩く叱ってくれるソフトです。 エディタはAtomを使っているのですが、 Atomだと書きながらリアルタイムでeslintが添削を行ってくれます。 Atom使えないシェルでいちいち怒られるか、ブラウザで毎回怒られることになりそうなので、 IDE万歳と思いました。

test(まだ何も触ってない)

これからやります。 とりあえずtestは開発とともに書き溜めるものと言う認識のみあります。 認識だけで実際に書いていないので私はクソです。

まとめ

とりあえず何か作るたいならvue-cliめっちゃ便利

webアプリを独力で作る体験をするのだ[AWSを使ったSPA, API設計を考えた]

設計が完了した

つい先日、AWSのサービスをひたすら適当に列挙していきました。 さらに適当な考察の末、それっぽい設計ができたかなと思います。 これから以下の画像についてざっくりと説明していきます。 (最初画像貼り忘れてた...)

f:id:went-went-takkun135:20171108110110p:plain
SPAの設計

フロントエンド

SPA

Single Page Applicationの略です。 最近やたらとサクサク動くwebサービスが多いなと思っていました。 調べてみるとフロントでレンダリングして、非同期的にデータを取得してるとかいう、 誰が考えたんだよ、天才かよ、っていうものがあったのでそれを作りたいなとなりました。

フレームワーク

SPA作るに際してフレームワークは何にするの問題があって、 みたいな話は以前した気がしますが、Vue.js を用いて実装していっています。

S3, CloudFront

SPAはただの静的ファイルのため、S3 において置くだけで良いようです。 ただ、S3において置くだけだと、アクセスはできないですし、 アクセス許可するとそれはそれでセキュリティ的にどうなのってなるので、 S3の前に CloudFront を噛ませます。 これで安心安全Https接続ですね。あまりhttpsが何かはまだわかっていないんですが...。 以下のページを参考にさせていただきました。 皆さんありがとうございます。

AngularJSで作ったSPAをAWS上の「S3+CloudFront」でお手軽ホスティングして、クラウドサービスってやっぱ素晴らしいなと思った話 | I am mitsuruog

SPAを S3+CloudFront で表示する方法 - Carpe Diem

[CloudFront + S3]特定バケットに特定ディストリビューションのみからアクセスできるよう設定する | Developers.IO

バックエンド

Web API

SPAにはバックエンドが必要です。 いや、何にでもですね、すみません。 基本的にSPAのバックエンドはWeb APIを作れば良さそうです。 将来的にはこの構成で、ネイティブアプリにも対応できるなとか考えてはいます。

フレームワーク

ここもまた前に話した気がするのですが、 Nodehapi を使って実装していきます!

Elastic Beanstalk

Googleさんに聞いている限り、 バックエンドはAPI GatewayAWS Lambdaで実装するパターンが多い気がします。 しかしながら、結構強めのバックエンド作ってやろうと意気込んでいたので、 (あとはシンプルにいつも触っていたので) Elastic Beanstalk を使うことにしました!

データベース

PostgreSQL

今こいつで死ぬほど詰まっています。 なんでDynamoだけじゃないの?って聞かれたら データサイエンティストになるならSQLは書けなければならない。 って誰かに言われたからです。 SQLなんてちょろいやろって思ってたんですけど、 SQL書き始める前のセットアップが辛すぎて泣きそうです。

Dynamo DB

メインは楽そうなのでこの子です。 しかも無料枠の幅が広い。 太っ腹や!!!! NoSQLというのもそうですが、 こっちはAWSコンソールで操作ができるので、セットアップがある程度楽そうですね! 最初のテーブル作るのとかGUIAWS内で提供してくれてるの良いです

まとめ

こんな感じで設計がまとまりました。 ほぼ全ての設定で詰まっているのでなかなか進みませんが、 頑張っていきたいと思います。

webアプリを独力で作る体験をするのだ[AWSのサービスを一通り眺めてまとめた]

AWS

みなさんご存知AWSだと思うのですが、 そのサービスの量に圧倒されました。 どのような設計がベストプラクティスなのかは、 経験と丹念なリサーチによって判断されるものだと思いますが、 初心者だってサービスを作りたいのです。 そこで、丹念なリサーチのみでawsサービスでの ウェブアプリケーションを設計を試みましたが、 とんでもなく時間がかかっているので、 ざっくりとしてサービスまとめを作っていきたいと思います。

コンピューティング

何かしらのソースコードをデプロイして、 CPUに計算を行わせるサービスはここに分類されるようです。

EC2

ありのままのサーバーみたいなもの

Lightsail

簡単にEC2を作るやつ

VPC

まだ調べていない

Batch

まだ調べていない。
まとめて処理?

Beanstalk

EC2上に簡単にウェブアプリケーションの作成を行える。 webサーバーの構築をスキップして、 アプリケーションサーバーのみを作成すれば良くなる。

Lambda

関数をデブロイしておくと、 登録したタイミング(時間指定やイベント指定)でその関数を実行してくれる。

Auto Scailing

これはここに分類されるの正しいのだろうか?
結構なサービスにつけれられる機能で、 仮想サーバーの処理能力を自動、半自動、手動で上下させることでコストを抑えたり、 サーバー負荷によるダウンを防ぐ。

ストレージ

いろんなウェブアプリケーションの事例を検索していた感想としては S3を使えれば良いのではないだろうかと考えています。 ということで今回はスキップさせていただきます。

データベース

データベースも色々出してるっぽいですね。

Aurora

下にあるRDSの中に含まれるべきと思うのですが... amazonが作ったRDSだと。

RDS

MySQLなどのリレーショナルデータベース。 結構色々種類ある。

DynamoDB

言わずと知れたamazonのNoSQLデータベース。

Elastic Cache

Redisなどのインメモリキャッシュミドルウェアを使えるサービス。 サービスの高速化のために。

Redshift

データウェアハウス?ってなんだ... SQL系のデータベースを解析するっぽい

AWS Database Migration Service

データ移行してくれるらしい 次の大項目移行やねんけど、ここであってるんか?

移行

と思ったらAWS Database Migration Serviceちゃんとありました笑 これもしばらく使わなさそうな項目なのでスキップです。

ネットワークとコンテンツ配信

VPC

Virtual Private Cloudの略らしい。 仮想環境の中で仮想コンピュータを立ち上げるみたいな感じなのだろうか。

Cloud Front

CDNサービス。 フロントとしてS3の前に設置するのを良く見る。

Route 53

ドメインネームシステム。 ドメインを取得するのだ。

Direct Connect

専用線接続するらしいです。 すみません勉強不足です

Elastic Load Balancing

サーバーの前などに設置したら、うまいこと負荷を分散してくれるやつ。

開発者用ツール

何やらCodeシリーズみたいなものが大量にありましたが、 自動デプロイとかは使うかもしれないなぁくらいなのでとりあえずスキップ。

管理ツール

Cloud Watchが有名な気がする。 監視系と管理系が詰まっているが、とりあえずスキップ。

セキュリティ、アイデンティティコンプライアンス

疲れてきたので、使いそうなもののみピックアップします!

Certificate Manager

HTTPSにするやつだと思ってるがあっているのだろうか

WAF

よしなに守ってくれるらしい

分析

データベースをうまいこと集計するときとかに使えそうなもの多数

人工知能

クラウドMLは楽しそうですね。 金も吹っ飛びそうですが

モバイルサービス

API Gateway

なぜここにあるのだろうか... APIのフロントエンドになってくれる。 バックエンドとしてLambdaと親和性が高い。

Cognito

認証機能を提供してくれるツール。 それだけかと思っていたら、デバイス間の同期とか書いていたからもう少し高機能っぽい。 コスト的に普通に自分で実装することになりそう

アプリケーションサービス

ふむ。次!!

メッセージング

あらゆるタイプの通知

SQS

どこかに何かを送信するのをキューとして管理

SNS

シンプルな情報発信

PinPoint

プッシュ通知

SES

Emailの送受信

その他

今の所使わなそうだからスキップ!!

感想

多すぎてサービスだけでコアな部分出来上がりそうやけど、 コストとのせめぎ合いになるのだろうか。 クラウドだからと行って管理が楽かは使い方次第だろうしな。 しっかし調べてみて、SIerがなんで儲かるか良くわかったわ。

webアプリを独力で作る体験をするのだ[序章~特に内容がありません~]

Webアプケーションを作る!ぞ!!(読み飛ばしてください)

ご無沙汰しておりました。 今回、見出しに書いているように、webアプリケーションを作る決心をしまして、 コードを書くのが楽しかったのとシンプルにブログ書いてる暇があったらinputしなきゃ! ってなっていたのでブログかけていませんでした。 しかし、inputがなければoutputができないように、 定期的なoutputがないと人は何をinputしていいかわからなくなるもの...? 嘘かもです。とりあえずひと段落ついたので久しぶりに投稿いたします。
モチベーションとしては、就活を控える身となって、 エンジニア職を探していると登録フォームに必ずと言っていいほど

成果物

欄があってですね、そういえば筆者は独力で何かしらの成果物を作り上げたことがあるのか 少し不安になってきまして、いっちょやってやるかとなったわけです。
どんなサービスを作るかはとりあえず秘密です! (上手いこといったら金取れるんちゃうん...とか考えてます)


hapi

Node

インターン先でNodeを使っており、 今の所Nodeの問題点にもそれほど遭遇していないため、 Nodeを使ってサービスを作って行きます! Nodeの大きなメリットは 非同期処理! アクセスが集中しても速度を保ちやすいらしいです! 後、Nodeはフレームワークではなくプラットフォームです。 筆者は使い始めてしばらく勘違いしていました。笑

フレームワーク

有名どころだと

  • express
  • hapi

だと思っています。 文献数が圧倒的に多いexpressを使おうかと思ったのですが、 インターン先で使っているhapiの方が学習コストを抑えられるなと思い、こちらにしました。 ちゃんとリサーチしていないので、双方の強みとかあまりわかってません。

学習方法

ドキュメントの概要みたいなものを一通り読んで、 インターン先のコードを参考にさせてもらいながら、 とりあえず手を動かす方式で行くことにしました。

jwt

認証方式が色々あって色々考えたのですが、 json web tokenがなんか最近流行ってそうかなと 適当に色々斜め読みした結果思ったので、 使うことにしました。 hapiでは hapi-auth-jwt2というpluginを入れてあげて ちょこちょこと設定をすればjwtが使えました。 主にgithubのreadmeを読みながら格闘しました。

Elasticsearch

人気の検索エンジン?ですよね??
なんか普通にデータベースとしても相当優秀なのではないかと思って、 こいつにデータをぶち込んでます。 JSON形式のものをそのまま突っ込むだけなので本当に楽、 その代わり頑健性的にはよくないのだと思います。

nodemon

ファイルに変更が加わったら、サーバを再起動してくれる便利なモジュール。
あってますか?笑 適当な認識でとりあえず使ってますが、 とても簡単に導入できて便利で良いです!

npm i -g nodemon

localのbinディレクトリにpath通すのが面倒だったので globalに入れました!

Vue.js

こいつが今回の関門だと思っています。 フロントエンドの勉強は全然足りていないので、 今からとりあえずドキュメントを一通り読みきろうかと思います。

まとめ

本文にまとまりが一切ないというか、 完全に自分の行なっていることの記録と化してしまいましたが、 とりあえず以上のような環境を用いて実装していこうと思います! 問題にぶつかったり面白いTipsが見つかったりしたら投稿していきます!

node + opencvに踊らされた話するわ

Open CV

言わずと知れた汎用画像処理ライブラリ。 最近知ったのはIntel社が出しているということ。 とりあえずかなりすごいという印象。 今回、行いたかったのは顔認識を行って顔部分を切り取って背景に乗っけるというもの。

went-went-takkun135.hatenablog.com

これの続きです! node上でopencvを扱えるライブラリも出ていたので、 こいつはサクッと行けるだろうとタカをくくっていたのですが、、、
ということで、今回露頭に彷徨いながら無理だったこととできたことを書きます。

Mac OS Xに導入

開始前の状態

実は自分のMacにはずいぶん前に師匠が入れてくれていたので、 そもそもopencvが存在する状態ではありました。 また、node-opencvはopencv2系のみをサポートしており、 ずいぶん前に入れていたことが功を制し、もう

npm install --save opencv

だけで行けると思ってたのですが、エラー。。

エラーに次ぐエラーと調査に次ぐ調査

brew update

エラーログを調べると明らかにopencvがないと言っていて、 パソコンを調べると明らかにopencvが入っているという矛盾。 昔に入れたから何かしらが変わったのかと思ってとりあえずは、

brew update opencv

そしたら、hey hey!opecv3にあげるならupgradeにしないと! 的なこと言われてfu*kってなりました。 結果、npmは微動だに認識せず。

brew unlink, brew reinstall

とりあえず、片っ端から再インストール系のコマンドを試していきましたが

なんの成果も得られませんでしたぁぁ!!

実行ファイルをリンク

結論から言うと、下記のコードを打ち込めばなんとかなりました。 opencvのバージョンは自分のものに直しました。

brew link --force opencv3
ln -s /usr/local/Cellar/opencv3/3.1.0_3/share/OpenCV/3rdparty/lib/libippicv.a /usr/local/lib/

Error: opencv@5.0.0 install · Issue #398 · peterbraden/node-opencv · GitHub

コマンドを眺める限り実行ファイルがbrewのカゴの中から 飛び立てなかったようですね。 これはopencvが悪いと言うよりは、 node-opencvがopenvを認識する範囲が狭すぎたことが原因の仮説です。

npm install opencv

これはこれで地獄を見ました。 謎のエラーが出続けるのですよ。 今回の一件でnode-pre-gypと言う謎のライブラリとELIFECYCLEなるエラーコードを 心底憎むようになりました。

様々なものをアップデート

とりあえずこれをしてみなよ!ってどっかのISSUEで言っていた諸々updateをやりました

npm install node-pre-gyp
npm install node-gyp
npm update -g npm

しかし効果はいまいちのようだ。

腹たったのでとりあえずnode_moduleを削除

一回ぶち消してもう一回installして見ました。 案の定ダメでした。
が、
少し収穫、sharpなる画像のサイズ変更モジュールとの依存関係がうまく言ってないっぽい?

腹たったのでとりあえずnode_moduleを削除2

依存関係か、なるほどと思い、その時相当尖っていた筆者はもう一度node_moduleを削除。

npm install -save opencv
npm install

と言う順番でinstallを敢行。 なぜだろう、動いてしまった。 原因はおそらくだがsharpとの依存関係で何かしらの悪さがあったのだろう

実はこれすればよかった説

npm dedupe

って打ち込むとなんかバグってる依存関係直してくれるらしいので、 最初からこれして入ればよかったかもしれないですね。

AWS Elastic Beanstalkに導入

結論から言いますが、できませんでした。

Elastic Beanstalkについてざっと

ソースコードをデプロイしたら、その他諸々の設定を自動でこなしてくれるAWSの1サービス。 nodeのものを使う場合、基本的にはpackage.jsonを勝手に読み込んでくれるため、 本当に特に設定なしで使える(はず)。 拡張設定を行いたい場合.ebextensionsと言うディレクトリを作成し、 その中にyaml形式かな?でコマンド等を書き込んでいく。

yumopencvのライブラリがない問題

Amazon Linuxのパッケージマネージャーはyumのはずなんですけど、 yumには一発でopencvが入るものが内容です。 正確には公式サイトに

sudo yum install numpy opencv*

で一発だよって書いているんですが、amazonyumは少し普通と違うのかな? 了解した。じゃあ生コードから入れるっきゃねーな。

とりあえずssh接続で確認

いきなり.ebextensionsにコマンド頑張って書き込んでミスりまくってたら恥ずかしいので、 まずはssh接続して、内部で試してみました。

sudo yum install -y cmake
sudo git clone https://github.com/Itseez/opencv.git /opt/elasticbeanstalk/eb_infra/opencv
cd /opt/elasticbeanstalk/eb_infra/opencv
sudo git checkout 2.4.13.2
sudo cmake ./
sudo make
sudo make install

これ最終形態ではあるんで、ここに来るまでの紆余曲折はあったものの 基本的にこれでインストールぽいことができていたと思います。 usr/local/binopencv_versionみたいなコマンドが存在することを 確認しただけではありますが。

.ebextensionsに記述

上記のコマンドをそのまま写しました。 そのまま順番に01-command, 02-commandとやって最初試すと、 04-command.gitディレクトリがないとのたまい始めたので、 これはもしかしたら並列処理で進んでる可能性があると考え、 全部&&で結んで一行のコードにしてやりました。 そしたら通ったので、elasticbeanstalkはおそらく 番号まで振らしておきながら 並列でコマンドをかけてやがります。

npm install 。。。

再度ここで壁にぶつかりました。 もうnode使うのやめろよと言う悪魔の声を 宗教上の理由で! と言う意味不明のパワーワードで搔き消しながら進んでいこうとしたのですが、 序盤に行ったようにnpm installを自動で実行してくれるため、 順番を変えたりできないんですよね。。 内部のPythonコードを書き換えたりしてみたのですがダメでした。

Game Over

でございました。

結論

OpenCV使うならPythonがいいと思う。


追記(2017/10/2)

上でグダグダぐちぐち言っておりますが、原因がわかったと思われます。

Unsupported platform for fsevents@1.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

エラーコードにこれが含まれていました、依存ライブラリがもしかしたらそもそもlinuxはサポートしていなかったのかもしれない。。 お騒がせいたしました。

Exif情報を抹消する最速の手法を思いついた気がする

iPhoneで撮った写真

iPhoneで撮った写真には大量のメタ情報が含まれています。 それらをまとめてExif情報っていうらしいんですけど、 普通に写真を扱いたい時に邪魔じゃないですか。 写真をアップロードして表示とかする時に、 あいつのせいで勝手に回転してたりするのがどうも気に食わない時があったんですよね。 ということでそれを削除するというのが今回の目標です。

検索結果と最初にやっていた解決法

Exif情報を消し去ってくれるアプリの宣伝等がヒットしました。 アプリ入れるの面倒だなとなんとなく思い別の記事を見ると、 プレビューアプリ使って、pngにフォーマット変換したらExif消えるよって書いていたので、 pngに変換して見ると、pngって重たいんですね、データサイズが5倍くらいになってしまったので これはいかんとそれを再度jpegに変換。 これをiPhoneからAirdropで送られて来た写真に対し繰り返していました。

気づいてしまった最速の手法

  1. iPhoneからラインで公式アカウントなどに画像を送信します
  2. PCでそのラインを開き画像をダウンロードします
  3. Exif情報が消えます

なるほど、ライン様様ですね。 アップロードの際にExif情報消してくれるらしいですね。

欠点

まとまった大量の画像などには適用しづらいかもです。 アルバム機能使ったらいいかもですけど、 Airdropの方が早いし、そういう時はサクッとアプリを入れてしまえばいいのかなと。

機械学習の勉強会「夏のトップカンファレンス論文読み会」に参加して来た

勉強会?的なものに初?挑戦

すみません。文字化けみたいになりました。 本日abejaさんが企画する 夏のトップカンファレンス論文読み会 に参加して来ました! abejaさんの名前からわかる通り、機械学習の論文読み会です。 企業が主催する勉強会というものに参加したのが初めてのようなもので、 (何回か就活系で行ったことある気もする)しれっと緊張してました。

abeja-innovation-meetup.connpass.com

参加動機として、日頃から参加させていただいている実装クラブのスラックに 本読み会の情報が流れて来て、先輩に筆者のようなへぼエンジニアが参加しても意義はあるのか? と、問うたところ 「正直よくわからん!」 と言われたので行って来ました!笑 予習ばっちしって状態で行く予定でしたが、何も間に合わず前半の人が何を話すかの把握程度での 参加となってしまいましたが、 その中で筆者がなんとなく思ったことなどをまとめていきます。

ディープラーニングは今尚最盛期

まだまだディープラーニングへの熱は冷めてない模様。 一部のトップリサーチャーなどはもう飽きたという声も上がりつつも、 全体のトレンドとしてはまだまだ来ている。 一方で、火付け役となったDCNNは論文がガンガン出てくるような状況ではなく、 GANやRNNなどのCNN以外のディープラーニングの技術が来ている様子。 CNNに関してはこれまでにでた技術を礎として、 その上に何を構築するかのフェーズに入ってきているとのこと、 そんな中、

CNNの畳み込み方には改善の余地がある

という論文を読んでくださったのがyosuke_shinyaさん。 少し、内容が難しくて理解できていない部分の方が多いのですが、 ざっくり言うと既存の画像認識では矩形を設定して畳み込んでいるが、 絶対矩形じゃない方が制度出るよね!その効率的なアルゴリズム考えたよ! みたいな感じだと思います。 すみません。やっぱり何もわかってないかもです。 既存の画像認識で難しかった小さい物体の検出や精度向上が期待されるみたいです!

DNNの見える化

DNNといえばブラックボックスで そのくせにハイパーパラメータが大量にあって、 いや、なんか知らんけどめっちゃいいの出てきたすごない? みたいな分野かなと思っていたのですが、 実際結構そう言う部分があってそこに問題意識もあるようで、 中間層の見える化が進んでいるようです。 これができるようになったらハイパーパラメータの数が減るかもしれないし、 ハイパーパラメータの最適化もすぐ済ませることができると思うから お買い得技術だなと思って聞いていました。

データがやはり大事だが…

データ作成をしている人たちがちゃんといてだな

質のいいデータこそが質の良いモデル作成に必須であることは周知の事実らしいですが、 金銭的コストも時間的コストも持って行かれてかつ、 面白くない という問題だらけのデータ作成問題?アノテーション問題が横たわっているらしいです。 逆にそこに目をつけてデータを売ったり、 有益なデータセットを作成するのも大事な仕事、研究だったようで、 データが命 っていうことはなんども聞いていた気がしたけど、 データ産業の大きさがなんとなく体感できてよかったなと思いました。 また、片岡さんという方がおっしゃっていましたが、 データセットを作るような研究をしていると 問題を出す側に回ることができるそうで、そうすることで 時代を引っ張るような大きな流れを生み出すリサーチャーになれる可能性が出てくるとのこと。 なるほどです。

高価なデータを効果的に利用するという観点

坂井さんという方が発表していらっしゃった内容は、 半教師なし学習です。 正直な話、今日の読み会に出席してトレンドなどとこの発表を聞くまでは 教師の有無に関してわかっているようで何もわかっていませんでした。 教師なしとはつまり強化学習であると思っていたくらいです。 半教師で精度が出せる話を丁寧にしていただいたのですが、 これまた正直な話、多分半分もわかっていないです。 ただ、概念的な説明からしていただいて、そっちの方は理解できたかなと。 ラベル付きのデータセットはコストがかかるので、 ラベルがないデータをうまく使って、コストを抑えることができないか、 また、現実的にラベル付きデータを作成しながら学習させるよりも 大量のラベルなしデータでさらに精度の良い学習ができないか。 というのがモチベーションだと思います。 その中で発表していただいたのはうまくラベル付きとなしを混ぜて行くというもので、 案外それでも精度が出るらしいです。 なるほどです。

今回の勉強会を終えて

わかったこと

  • DCNNに関してはかなりモジュール化が進んでいる
  • DCNNを使って何かをするために最新の技術をサーベイしまくるとかはもう必要なさそう
  • データは死ぬほど重要だから大事に扱う
  • データのうまい使い方はいくらでも出てきそうだからサーベイした方が良さそう?
  • 勉強会に参加することでモチベーションが上がる
  • 機械系の筆者が行くような企業がいっぱい来てたからみんなDL勉強中
  • インターンこそ現代就活最大の武器
  • セカンドエキスパートは最強らしい
  • DNNはツールだから自分の専門に持ち帰ると良い
    • そうすることでDNNのメンターもつくかも!
  • とりあえず実装して遊ぶことから始める
  • (その場では)わからなくてもいいから勉強会に参加するのは大事
  • 大企業でDLの企画?を通すのはなかなか難しい
  • やっぱり数学も大事かも

これからやるべきこと

  • とりあえず実装 -> 現在3D GANを実装というか実装済みのものを理解せんとしてます
  • 最低限の数学的知識を得る(特に表記がわからないという絶望的状況からの脱却)
  • 情報蒐集の網を広げる -> このような勉強会があればまた参加したいなと

以上です!雑なまとめですみません!何か情報があれば教えてくれるとありがたいです。発表者の皆さんお疲れ様でした!