orizuru

つながる.見える.わかる IoTソリュ-ション

main_contents

更新情報

工場(製造現場)向けIoTソリューション

自社のIoTシステムを利用した工場(製造業)向けソリューション「Orizuru」は、工場内の各種設備からデータを収集する「ゲートウェイ」、収集したデータ処理をする「データプラットフォーム」、リアルタイムにデータを見える化する「ダッシュボード」、3D CADデータをブラウザ上で表示する「3Dビュー」などの各システムを備えるトータルソリューションになります。

IoTソリューション「Orizuru」では、これらの各ソリューションの個別提供から、「ゲートウェイ」「データプラットフォーム」「ダッシュボード」をパッケージングした「Orizuru IoT」の提供をしております。また、3Dデータをクラウドで管理、表示、検索できる機能を備えた「Orizuru 3D」の提供もしております。

IoTソリューション全体像

IoTソリューション全体像

  • 設備のデータ収集
  • 設備の制御
  • 他のシステムへのデータ連携
  • サーバとのデータ送受信
  • リアルタイム通信
  • リアルタイム検知・通知
  • データの統計処理と機械学習
  • データ保存先選択
  • 各種データのグラフ化
  • 設備ごとの見える化
  • 設備のコントロール
  • ユーザ管理
  • 3Dデータの各種表示
  • 3Dデータの360°ビュー
  • 大容量データの表示

IoTソリューション「Orizuru」の特長

製様々な設備のデータ収集
工作機械で使用するCNCやPLC、産業用ロボット、温度や振動などのセンサーなどのデバイスから各種データを収集することが可能です。様々なデバイスからデータを集約して収集できることで、管理メリットが生まれます。
データの他システムへの連携
昨今様々なwebサービスがありますが、それらの各種webサービスへのデータ連携が可能です。例えば、見える化のwebサービスやBIツールなどへのデータ連携、それ以外にも社内システムへ連携することができます。
データの一元管理
Gateway(ゲートウェイ)から送られてくる様々なデータを一元管理します。様々なソリューションやサービスを使うことによるデータ管理コストを抑えられ、御社の貴重なデータ資産を管理します。
AI、機械学習によるデータ活用
解析したデータを活用し、不良品の検知や製品需要予測、設備異常の検知、製品の故障予測などに繋げることができます。お客様の課題にあわせて必要なデータを取得することから始めていきます。
自動化、予兆保全の実現
AI・機械学習により予測や異常検知できたことをキーとして、次のアクション、すなわち自動化や予兆保全を実現することが可能です。データ活用としてコスト削減や品質改善などを実現します。
各種データのグラフ化
データを目的に応じて表示を変えることが可能です。時系列データーであれば折れ線グラフ、累積データであれば円グラフや棒グラフなどの形式で表示でき、データの取得間隔を狭めることで、リアルタイムデータでの表示も可能です。
巨大な3Dデータをwebで表示
数十GBに及ぶ巨大な3Dデータもスムーズにレンダリングして表示することができます。また、専用ソフトを必要とせず、様々な形式のデータをWebブラウザやスマートフォンで確認することが可能です。
3Dデータの検索
管理しているデータから類似する3Dデータを検索できます。データ形式を問わず、異なる3Dデータを横断して検索可能です。3Dデータ作成前に類似データを確認することで、設計の二度手間を防ぐことができます。
点群データを扱える
CADデータだけでなく、点群データも管理できます。従来は別々に管理していたデータを結合することで、複数のソフトウェアを立ち上げてデータを検索しなければならないといった手間がなくなります。

Orizuru IoT

工場IoT

Orizuru IoTは設備を制御しているCNCやPLC、ロボット、各種センサーとゲートウェイが通信することでリアルタイムにデータを取得、蓄積していくことが可能です。 Orizuru IoTは、マルチデバイス対応ができる国内唯一のソフトウェアです。多くのお客様が実現したいと考えられている、工場、ライン、設備単体の稼働監視や故障原因の特定も、Orizuru IoTでデータを取得することで可能になります。ゼロベースからIoTシステムの開発をすると大規模投資が必要になります。Orizuru IoTならば短時間で設備との通信を確立させることが可能です。 Orizuru IoTによって工場のスマート化を実現させてください。

「Orizuru IoT」の詳細はこちら

Orizuru 3D

3Dデータのweb表示

Orizuru 3DはCAD・点群などの3Dデータを統合管理するソフトウェアです。これまで扱えなかった数十GBに及ぶ容量の巨大な3DデータをWebブラウザで表示できます。それぞれのデータ形式ごとの専用のソフトウェアを使う必要はありません。また、類似する他の3Dデータを、データ形式を問わず横断的に検索できます。クラウドサービスとして提供しているだけでなく、セキュリティや通信速度などのご要望に応じてオンプレミス環境で社内ツールとしてもご利用いただけます。​

「Orizuru 3D」の詳細はこちら

IoTソリューション紹介動画

IoTのお悩み解決

 お客様からIoTに関する様々なお悩みをご相談いただいております。IoTの導入に関することやデータの取得方法、取得したデータの活用方法や見える化など多岐にわたります。このようなお悩みごとに対して弊社としてもなんとか解決したく、日々ご提案をしています。こちらでは、その内容の一部をご紹介します。

パートナー・会員

三菱電機のe-F@ctoryパートナー

e-F@ctory Allianceとは、弊社FA機器との接続親和性の良いソフトウェア・機器を提供するパートナーとそれらを活用しシステムを構築するシステムインテグレーションパートナーとの強力な連携により、お客様に最適なソリューションを提供するためのFAパートナープログラムです。

  • e-F@ctory Allianceの詳細は、こちら をご覧ください。

e-F@ctory Alliance

Aras社の公認パートナー

Aras Innovator®は米国Aras社が開発・提供している、ライセンスフリーのエンタープライズPLM(Production Lifecycle Management)ソリューションです。製品の企画・設計から生産・保守までの製品ライフサイクル全体の管理が行えます。

  • Aras Innovatorの詳細は、Aras PLMソフトウェア をご覧ください。
  • Aras®およびAras Innovator®は、Aras Corporationの登録商標または商標です。

Aras AUTHORIZED Partner 2017

BECKHOFF社の開発パートナー

2018年よりベッコフオートメーション株式会社 の開発パートナーとして、弊社はソフトウエアの開発をサポートさせていただいております。BECKHOFF社製品とソフトウエアとのコミュニケーションを円滑にできる技術支援などを行わせていただいてます。

BECKHOFF

ORiN協議会の会員

ORiN (Open Resource interface for the Network)とは,メーカ・機種の違いを超え、統一的なアクセス手段と表現方法を提供する通信インターフェースです。ロボット、PLC、NC工作機械などの制御装置の情報にアクセスするための標準仕様であり、ORiN2SDKとして実用化されています。

ORiN協議会

AWSパートナーネットワーク(APN)

弊社はAPNコンサルティングパートナーとして、AWS上での顧客のワークロードとアプリケーションの設計、開発、構築、移行、および管理を支援することが可能です。AWSのシステムインテグレーションやアプリケーション開発などご相談いただけます。

AWSパートナーネットワーク(APN)

大学院生の就活は不利なのか?

大学院生の就活は不利なのか?

こんにちは!
採用担当の池田です。

突然ですがAbemaTVで放送している、堀江貴文さんの東大合格プロジェクトの番組って知っていますか???
東大合格番組って過去にも数多くあったと思いますが、堀江さんだと少し期待しちゃっているんですよね(笑)頭の良い人って抑えるポイントを掴んでいると思うので、無駄がないというか効率的というか。。。

私は今振り返っても、自分の大学受験は相当効率が悪かったと後悔しています。とにかく机に向かうことが重要だと考えていたので、寝不足でも、集中力が切れていても、とにかく机にだけは向かっておりました。机に向かっている時間だけだと、全国でもトップクラスだったと自負しております(笑)

また各科目の対策も基本的にすべて我流で、自分のやり方が絶対に正しいと信じていた典型的ダメ受験生でした。合格まで見据えての逆算したやり方ではなく、ただ目の前のテスト結果を見て、
「物理が悪かったから物理に注力だ!」みたいな感じだったので、戦略もへったくれもありません。

今振り返れば、病院に行けば何かしら病名を付けてくれるほど追い詰められていたような気はしますね(笑)

でも今って色々な受験勉強のやり方や各科目の対策がネットに溢れているので羨ましいなと思います。もちろん、
今私が高校生に戻ったら多くの情報を参考にできるから東大も楽勝でしょ
みたいには思っておらず、結局頭の悪さ以上に精神力のなさが原因なので、私は私のままでしょう(笑)
今後大学受験を控える方の中で、もし私のように精神的にタフではないなと思う方は、まず全体の戦略を練って、自分に合う方法を見つけることをお勧めします。

ちなみに余談ですが、私が人生で一番緊張したのはセンター試験で、今でも鮮明にその当時の様子は覚えています。

私の名字は「いけだ」なので「あ行」になるのですが、センター試験の会場ってあいうえお順で並べられますよね。(会場によって異なるかもしれません)基本的に大きい会場から埋められていくと思うのですが、そうすると「あ行」ってデフォルトで大きい会場に案内されるわけです。(多分名字が後ろの人は小さな会場になることが多いはず)そのため私は300人の会場だったのですが、300人が一斉にページをめくる音とか鉛筆の音とかを聞きながらやるのは正直不利だと思っていて、点数に換算すると5教科7科目でトータル30点ぐらい変わってくると今でも恨んでいます(笑)ただただ周りが気になって集中できやしなかったですし、隣に座っていた女性の鼻をすする音とか本当に止めてほしかったですもん。。。

また近隣の高校と一緒だったので、同じ中学出身の友人が同じ会場に何人もいたのですが、休み時間の度に私のデスクのところに来て、
あの問題って①だよな???
みたいな感じで聞きに来るのとか本当に勘弁でした(笑)

頼むから一人にしてくれと。。。終わった科目のことなんか忘れて次の科目に集中したいんだと。。。というか、あの問題の答え①だったのか。。。間違えたのか。。。終わった。。。

みたいな心境が2日間丸々続くのは本当に地獄でした。

まあこんなプレッシャーに弱い私なので、センター試験は案の定失敗してしまいました(笑)
失敗というかそもそも実力が無かったのでダメでしたね。。。。

ともかく受験生の皆さんはお疲れ様でした!2次試験の結果がそろそろ出ると思うので、幸運を祈っております。

さて今回は大学院の方に関する就活についてお伝えします。

大学院生の就活って不利なの???

早速ですが、大学院の方の就活って不利なんですかね???(笑)

正直私が聞きたいというのが本音です。

弊社は理系中心の会社のため、修士や博士の方を非常に求めています。(もちろん文系の方もウェルカムです!)そのため大学院の方達の就活が不利という記事を見かけると、「本当かなぁ?」といつも首をかしげるんですよね。

また私は学部卒だったのですが、院に進学した友人は皆さん不利に感じたことはない様子でした。というより、感覚にはなりますが院に進学した友人の方がむしろ本人が望む企業に入社している気はしています。

そもそも“不利”というワードの定義が曖昧なのもありますが、おそらく記事で見かける“不利”の意味するところは、

学部生と比較して、大学院生は企業から欲しがられていない

ということを指しているのだと思います。

最初にも伝えたように弊社に関していえば全くそんなことはないのですが、もし他の企業がそう思っているのだとすれば、大学の在り方や企業の育成への考え方に原因があると思っています。

まずそもそも論ですが、日本の大学ではあまり勉強しない風土が横行しており、もっと言えばサークルやアルバイトに精を出すことの方が大学生らしいみたいな感じもありますよね。
またそれによって大学教授の方も授業への工夫が見られず、形式的な内容になってしまい悪循環になっているのは言うまでもありません。

そうなっている現状が前提で考えると、企業側からすれば、
学生にそもそも勉強なんて求めていないから、それよりコミュニケーション力を重視しよう
となっているのではないでしょうか。

また入社後は“ジョブローテーション”という名の下で、様々な部署を広く浅く経験させて企業戦士になっていくのですが、結局大学や大学院で学んできたことが活かせる部署に入れる保証もなく、仮にその部署にアサインされても、数年おきに様々な部署へ異動になってしまうので、結局学んできた学問は意味を成さなくなっています。

つまり、新卒で採用するなら若くてコミュ力ある方の方が良いと思われてしまった結果、大学院生に対しての需要が少ないという感じでしょうか。

ツラツラと書きましたが、ここまでは多くの方が同じように思っていることなので真新しさはないですよね(笑)
はい、大変失礼しました。次章から少し毒付いていきます(笑)

ガクチカって聞いて意味ある???

突然ですが、企業で働く採用担当者の皆様、特に大企業で働く採用担当者にお聞きしたいのですが、ガクチカ(学業以外)って聞いて意味あります??(笑)

ガクチカとは、就活生の中では通用するワードだと思いますが、
学生時代に力を入れたことは何ですか
という超ウルトラ頻出質問の短縮版を指しております。

まず間違いなくどの企業に行っても聞かれますよね。

ガクチカを制する者は、就活を制す
と言っても過言ではないでしょう。

でも、私は採用担当者としてあまりこの質問好きじゃないんですよね。
というより、この質問の回答が学業であれば興味津々でその後聞きますが、サークルやアルバイトだとそこまで興味湧かないんです(笑)

だって、いくらでもウソがつけるから。

私は自慢ではないですが、前職で多くの就活生のガクチカを聞いてきたので、特技としては、全方位のガクチカをでっち上げることには自信持っています(笑)

  • 海外留学で日本人が誰もいない中、いろいろ工夫して、最終的にお別れ会を開いてもらえるほど別れを惜しまれた話
  • サークルで新入生の入部者数が悪かったので、いろいろ工夫して翌年には20名の入部があった話
  • 塾のアルバイトで成績が上がらない中学生に対して、いろいろ工夫して見事第一志望に受かった話
  • ボランティアのリーダーとして、やる気のなかったメンバーにいろいろ工夫して、最終的にはモチベーションが上がって、ボランティアに興味がある友人を連れてきてくれた話
  • 部活動で最初はレギュラーじゃなかったが、いろいろ工夫して最終的にはレギュラーとして2部昇格に貢献した話

もしガクチカのネタに困っている方がいたら、どうぞご相談ください。あなたの性格に合ったガクチカを作成し提供可能です(笑)

はい、ごめんなさい。ふざけ過ぎましたね。就活生を馬鹿にしようとする意図は一切ございませんが、もし心証を悪くされた方がいたら本当に申し訳ございません。
ただここで言いたいのは、ガクチカは正直客観的にはどこまで本当かがわからないということ。

特に今は様々なタイプのガクチカを無料で閲覧できるので(エントリーシートを無料公開しているサイトは多々あります)、自分に近しい経験を参考にして模倣することは可能ですよね。

そのため相手が何を求めているかを察する力が長けている方は、いくらでも自身のエピソードにテコ入れして話を膨らませることができるんです。

ちなみにお笑い芸人さんが就活やったらめちゃくちゃ成功すると思います。
だって日常の些細な話を、相手が興味を持ってくれるように話を構成し、しっかりオチまでつけて笑わせてくれる能力があれば、面接なんて容易でしょう。

ただこれらのカラクリは就活生側も気付いています。だからこそ就活エリートと呼ばれる人種が生まれ、学業よりも就活に費やしてしまうのではないでしょうか。

学業こそ、人となりが分かる質問

弊社では学業をしっかり聞く面接を設けています。こんなこと言うと弊社を避ける方もいるかもしれませんが、別にどんな分野でも良いんです。文系領域でも良いですし、自分の専攻じゃなくても全然良いんです。自分が興味を持った分野であれば何でもOKです。

学業を聞くことで、その人の深さというか考え方が分かると思うんですよね。

ちなみに、、、前章でガクチカについて毒付きましたが、企業の方もガクチカそのものを聞いて判断しようとしているわけでは無いと思います。最も手っ取り早く広い質問であるガクチカを聞くことで、話し方や論理的思考力、表情や振る舞い等を総合的に理解しているだけというのはもちろん分かっています。

ただ、とは言え過去の経験だけを元に、その人を判断しがちな方があまりに多く見られるので、それは浅はかではないかと伝えたいんですよね。

例えば過去の経験で、何かを諦めた経験があったとします。そうすると、
この学生は1度諦めた経験があるから、入社しても逃げ出してしまう可能性がありそう
と判断しちゃう方って多いと思うんですよね。

もちろんこの判断はごく自然だとは思うものの、その1点だけの事象でその人を判断して良いの?って思っちゃうんですよね。

ちなみにこのような判断を安易にしてしまう人を、
原体験信者
と私は皮肉って呼んでいます(笑)

今の“自分”は紛れもなく過去の体験に基づいて形成されているのは事実ですが、別に過去は過去じゃんかと。
過去、何かマイナスな経験をしたら未来はないのかと。

そんな考えを私は持っているので、ガクチカそのものをメインに聞く面接には若干否定的なんです。

少し話が逸れちゃいましたが、ガクチカが絶対に悪いわけではないですが、それ以上に学業のほうがその人を理解する要素が多く詰まっていると思うんですよね。

  • なぜその学問分野に興味を持ったのか
  • どのように学んだのか
  • それを学んだことで何を思ったか
  • それに似た分野で〇〇があるが、それについてはどう考えるか

などなど、サークルやアルバイト等の課外活動ではウソはつけても、学業面ではウソがつけない質問が多いので、その人の考え方そのものを問うことが出来ると考えています。こちらの方がよっぽど本質的ではないでしょうか。

大学院生にとって今の就活システムは圧倒的に不利

ちなみにですが、私はサークルやアルバイトといった活動を馬鹿にしているわけでは一切ございません。
私自身も学生時代の塾のアルバイトがあったからこそ、今の仕事に繋がっている部分があると思いますし、これって学業だけやっていたら分からない部分だったと思います。

ただ就活という場において、あまりに学業が無下にされているのが良くないと思っているんです。

だって大学院生に、「学業“以外”で頑張ったことありますか?」という質問をすること自体不毛じゃないですか?でも現実的には企業側が学業以外の経験を求めることって多いんですよね。

そもそも論ですが、今の就活システムは大学院生にとっては圧倒的不利になっているのは間違いありません。特に修士の方は、修士に入った2か月後の6月からインターンシップが始まるので、研究どころではありません。
でも大手に行きたければインターンに行かないと不利になるという情報が流れているので、せっかく研究をしたくても、就活のために、不毛なエントリーシート作成やインターンのための説明会に行かなくてはいけません。

いっそのこと、インターンって廃止したらダメですかね?大学院生の研究を妨害しているという観点で言えば、国益損失にも繋がりかねないと言っても過言ではないと本気で思っています。

とはいえ、そんなこと言っても現行のシステムは変わらないので、日本の理系人材喪失を憂うより、現実に対応した方法を考えなければいけません。

大学院生がすべき準備

これは学部生との比較になりますが、大前提として大学院生は時間が足りません。就活にかけられる時間が圧倒的に少ないのは紛れもない事実でしょう。

つまり認識すべきは、少ない時間でいかに効率的に情報を集めて、就活を理解するか、になります。

そこですべきことは下記になると思います。

①今の就活を理解している就活経験者を捕まえる

分からないなら、聞くことが一番です。就活ってやる前は全く想像もつかないと思いますが、終わってしまえばみんなが就活専門家と自称できるほどそこまで複雑なものではございません。

就活は十人十色なので、考え方が偏った先輩を捕まえてしまうのは危険ですが、大枠の全体像を掴むためにはしっかり就活を遂行した方であればある意味誰でも良いです。大学院生の強みの一つに、高校や学部時代の同期が既に社会人となっていることだと思い、ぶっちゃけた話も聞きやすいのではないでしょうか。

とにかく分からないことは積極的に質問すると同時に、随時連絡が取り合える方が1人でもいると心強いので、まず身の回りにそのような方がいないかを確認しましょう。

就活のアドバイスをしたがる方は思っている以上に多いですよ。

②早期にオファー型採用媒体に登録する

企業からスカウトを受け取ることが出来る媒体があるのはご存知ですか?私の時代は無かったツールですが、徐々に就活生に浸透していますよね。
自分から企業を探すとなると色々面倒だと思いますが、企業があなたの経歴を見て説明会に呼んでいるので、気持ち的にも行きやすいのではないでしょうか。
(詳細プロフィールを読んでスカウトメールを送っている方もいますし、学歴だけ見ている方もいますし、適当に送っている方もいるので、一概には“あなた”目当てで送っているとは言えませんが、少なくとも弊社はちゃんとプロフィールを読んでスカウトしておりますよ(笑))

結局、就活って百聞は一見に如かずなので、場数を踏むことが重要です。自分で探していく手間がかからないので、まずは登録してみましょう。代表的なのは下記になります。

  1. アカリク(媒体&スカウトの両軸です)
    https://acaric.jp/
  2. LabBase
    https://labbase.jp/
  3. オファーボックス
    http://offerbox.jp/
  4. キミスカ
    https://kimisuka.com/

③推薦応募があるかを確認しておく

大学または研究室によりけりですが、大学院生の場合は推薦枠があります。これは企業から特定の大学や研究室にいる方だけを対象に推薦枠を設けているものです。
ただ推薦と言っても大学内で選考があるケースもありますし、仮に推薦枠で応募できても、必ず受かるか否かはわかりません。
ただ自分で探して応募する一般応募よりも、内定を得やすいのは事実ですし、面接1回だけで終了することもあるので、大学院生にとってコスパは良いのではないでしょうか。

大学院生と話していると、意外に自分の大学や研究室の推薦枠を知らないケースが多いので、早急に大学や研究室の先生に確認しましょう。

ちなみにデメリットとして推薦枠で合格すると辞退できないとありますが、法律上はそんなことないのでご安心を(笑)皆さんには職業選択の自由が保証されておりますので。ただ教授の方や大学から怒られたり、後輩に迷惑が掛かってしまうので、万が一悩んだ場合はしっかり周りに相談することをお勧めします。

④研究室の先生と就活スタンスについてきちんと話しておく

残念ながら大学の先生は就活について知らない、または理解がない方が多いのが現状なので、いざ就活が始まっても、
うちの研究室のコアタイムはしっかり守れ
就活なんてくだらないものやってないで、研究をしっかりやれ
と怒られるケースも多々あります。

実際にはそれを振り切って就活することは可能でしょうが、ただでさえ精神的に辛い状況に追い込まれる就活中に、余計な悩みの種が増えることは避けたいですし、面接シーズンに論文発表が重なるとそもそも卒業に影響が出てくるかもしれません。

就活が本格化する前に研究室の先生とは就活スタンスについてしっかりお話しすることをお勧めします。

⑤研究はしっかり取り組む

当たり前のことですが、ここが崩れるとそもそも本末転倒です。最近だと学部時代の就活が上手くいかずに仕方なく大学院へ逃げるように進学する方もいますが、学部時代に比べて間違いなく学業について聞かれる割合は増えます。にも関わらず修士に進学した直後から夏のインターンの準備に励み、早期選考で様々な企業を受けて場慣れして~みたいな学部生のような就活をしても、学部時代より苦しい立場になりかねません。
研究がブレたら致命的ですので、ここは必ず押さえて下さい!

大学院生の就活は物理的に不利になる部分はあるものの、弊社はもちろん、その他企業でも研究に熱心に取り組んでいる方の需要は多いと感じています。
とはいえ、就活を知らないばかりに適当な企業に就職をして、せっかく勉強してきた分野を活かせない方も多くいるので、ぜひ大切な進路を無下にすることなく、効率的に就活に取り組みましょう。

ガウス過程

はじめに

 今回は、回帰を行う1手法であるガウス過程についてまとめる。

ガウス過程とは

 いま、入力値\vec{x}に対し次式で定義される関数y(\vec{x})を考える。

(1)    \begin{equation*} y(\vec{x})=\vec{w}^{\;T}\vec{\phi}(\vec{x}) \end{equation*}

ここで、\vec{w}\vec{\phi}はともにM次元ベクトルであり、後者は入力値\vec{x}M次元特徴空間に射影する関数である。いま、N個の入力値・出力値のペア(\vec{x}_n,y_n),n=1,\cdots,Nが観測されたとする。これらを並べると以下の行列表記を得る。

(2)    \begin{eqnarray*} \vec{y}= \left( \begin{array}{l} y_1\\ \;\;\vdots \\ y_N \end{array} \right) &=& \left( \begin{array}{l} w_1\phi_1(\vec{x}_1)+w_2\phi_2(\vec{x}_1)+\cdots+w_M\phi_M(\vec{x}_1)\\ w_1\phi_1(\vec{x}_2)+w_2\phi_2(\vec{x}_2)+\cdots+w_M\phi_M(\vec{x}_2)\\ \hspace{2cm}\vdots \\ w_1\phi_1(\vec{x}_N)+w_2\phi_2(\vec{x}_N)+\cdots+w_M\phi_M(\vec{x}_N)\\ \end{array} \right) \\ &=& \left(	   \begin{array}{cccc}   \phi_1(\vec{x}_1) & \phi_2(\vec{x}_1) & \ldots & \phi_M(\vec{x}_1) \\   \phi_1(\vec{x}_2) & \phi_2(\vec{x}_2) & \ldots & \phi_M(\vec{x}_2) \\   \vdots            & \vdots            & \ddots & \vdots \\   \phi_1(\vec{x}_N) & \phi_2(\vec{x}_N) & \ldots & \phi_M(\vec{x}_N) \\   \end{array}   \right)   \left(   \begin{array}{c}   w_1 \\   w_2 \\   \vdots \\   w_M   \end{array}   \right)\\ &=& \Phi\vec{w} \end{eqnarray*}

ただし、\Phi_{nm}=\phi_m(\vec{x}_n)とした。ここでパラメータ\vec{w}に対し次の事前分布を仮定する。

(3)    \begin{equation*} p(\vec{w}|\alpha)=\mathcal{N}(\vec{w}|\vec{0},\alpha^{-1}I_{M}) \end{equation*}

これは、平均\vec{0}、共分散行列\alpha^{-1}I_{M}を持つガウス分布である(I_{M}M\times Mの単位行列)。\vec{w}がガウス分布に従うので式(2)から\vec{y}もガウス分布に従う(証明略)。その平均値は

(4)    \begin{eqnarray*} {\bf E}(\vec{y}) &=&\int d\vec{w}\;p(\vec{w}|\alpha)\vec{y} \\ &=&\Phi \int d\vec{w}\;p(\vec{w}|\alpha)\vec{w} \\ &=&\vec{0} \end{eqnarray*}

となる。同様にその共分散行列は

(5)    \begin{eqnarray*} {\bf E}(\vec{y}\vec{y}^{\;T}) &=&\int d\vec{w}\;p(\vec{w}|\alpha)\vec{y}\vec{y}^{\;T}\\ &=&\Phi\left[\int d\vec{w}\;p(\vec{w}|\alpha)\vec{w}\vec{w}^{\;T}\right]\Phi^T \\ &=&\frac{1}{\alpha}\Phi\Phi^T \\ &\equiv&K \end{eqnarray*}

である。これはN\times Nの行列となる。Kの要素は次式で与えられる。

(6)    \begin{eqnarray*} K_{nm} &=&\frac{1}{\alpha}\sum_k\Phi_{nk}\Phi_{km}^T\\ &=&\frac{1}{\alpha}\sum_k\Phi_{nk}\Phi_{mk} \\ &=&\frac{1}{\alpha}\sum_k\phi_{k}(\vec{x}_n)\phi_{k}(\vec{x}_m) \\ &=&\frac{1}{\alpha}\vec{\phi}^{\;T}(\vec{x}_n)\vec{\phi}(\vec{x}_m) \\ &=&k(\vec{x}_n,\vec{x}_m) \end{eqnarray*}

k(\vec{x}_n,\vec{x}_m)はカーネルと呼ばれる量である。ここまでの議論から\vec{y}はガウス分布\mathcal{N}(\vec{y}|\vec{0},K)に従うことが分かる。
\vec{y}=(y(\vec{x}_1),\cdots,y(\vec{x}_N))^Tであるから、関数y(\vec{x})の分布がガウス関数に従うことになる。このような確率過程yをガウス過程と呼ぶ。

ガウス過程y(\vec{x})とは集合\left(y(\vec{x}_1),\cdots,y(\vec{x}_N)\right)の同時確率分布がN次元ガウス分布であるような過程のことである。

 ここまでの説明では、モデル(1)と事前確率(3)を仮定してガウス過程を導いた。一般にガウス過程を用いて解析を行う際は、議論の一番最初でyをガウス過程と仮定し、その共分散行列にパラメータを持つ適当なカーネルを設定する(平均値の方は\vec{0}と置くことが多い)。そして、観測値を再現するパラメータを最尤法やベイズ推定で求める。

 式(1)を用いた回帰の解法として、先のブログでも3つの手法を解説した。これらはいずれも写像\vec{\phi}(先のブログでは\vec{\phi}(\vec{x})=\vec{x})により変換されるM次元特徴空間内での計算を行う。一方、ガウス過程では、観測値の個数Nで決まる多次元空間内で計算が行われ(共分散行列KN\times Nの行列である)、写像\vec{\phi}の効果はカーネルを介して考慮されることになる。一般に、N\gg Mであることが多いのでガウス過程の方が計算量は多い。しかし、カーネルを介してさまざまな特徴空間を考慮することができるメリットがある。特にガウス関数型のカーネルの場合、それに対応する特徴空間は無限次元となる。このあたりの利点は、SVM(Support Vector Machine)でカーネルを導入する際の利点と同じである。
 

カーネル

 カーネルを変えることで様々なガウス過程を作ることができる。この自由度の大きさがガウス過程の強みである。ただし、全く自由にカーネルを決めることができるわけではなく、以下の制約を満たさなければならない。

Kは正定値でなければならない。すなわち、任意のN次元ベクトル\vec{z}に対し\vec{z}^{\;T}K\vec{z}>0を満たさなければならない。

いま、\vec{x}を1次元としガウス過程yを実際に生成してみる。以下2つのカーネルを考える。

(7)    \begin{equation*} k(x_n,x_m)&=&\exp{\left(-\theta|x_n-x_m|\right)} \end{equation*}

(8)    \begin{equation*} k(x_n,x_m)&=&\exp{\left(-\frac{(x_n-x_m)^2}{2\sigma^2}\right)} \end{equation*}

プログラムの内容は以下の通り。

  1. [0,1]の間をN等分し、入力値\vec{x}=(x_1,\cdots,x_N)を作る。
  2. N\times NのカーネルKを作る。
  3. Kを共分散行列に、\vec{0}を平均値に持つN次元ガウス分布を作る。
  4. このガウス分布からN次元ベクトル\vec{y}を生成する。
  5. \vec{x}\vec{y}をプロットする。

コードは以下の通り。

式(7)のガウス過程は以下の通りである。このカーネルはブラウン運動を説明するために導入されたものである。


式(8)のガウス過程は以下の通りである。

いずれの図においても5つの過程をプロットした。これらは互いに独立に生成された5つのガウス過程である。実際に観測値の回帰を行う際は、観測値を再現しそうな曲線が高い確率で、再現しそうにない曲線は低い確率で下図のように生成されることになる(ここから引用した)。図中のばつ印は観測値を、薄い青色の曲線の群がガウス過程から生成された曲線である。濃い青の曲線は曲線群の平均値である。

まとめ

 今回は、ガウス過程の入り口を解説した。最近、ディープニューラルネットワーク(DNN)をガウス過程として構築する論文が発表された。ここでは、ある極限においてDNNは厳密にガウス過程と等価となることが証明されている。以前取り上げたベイズ推定や今回のガウス過程と関連付けた深層学習の研究が盛んである。次回は具体的にガウス過程による回帰を行ってみたい。

参考文献

  • Pattern Recognition and Machine Learning
  • Auto-Kerasで深層学習のモデルを自動で生成する

    こんにちはtetsuです。

    今回は、人間が頑張って試行錯誤しなくとも、高精度なディープラーニングのモデルを寝てる間にでも自動で生成できたらいいなぁという願望を叶えることができるかもしれないAuto-Kerasについてご紹介します。特に、画像分類の実験を通してAuto-Kerasの使い方とその結果について説明します。

    Auto-Kerasとは?

    Auto-KerasはテキサスA&M大学の方が中心となって開発しているオープンソースのライブラリになります。使う側が学習データを用意し、Auto-Kerasに学習データを与えることで、精度の良いディープラーニングのモデルのネットワーク構造とハイパーパラメータを探索してくれます。Auto-Kerasのように学習データと解きたい問題の種類(回帰、分類、ランク学習など)を与えると、良いモデルのネットワーク構造を探すような手法をNeural Architecture Searchといいます。
    この記事を書いている2019/3/7現在はRNN(Recurrent Neural Network)はサポートされていませんが、CNN(Convolutional Neural Network)はサポートされており、CNNを使った画像分類やテキスト分類のためのネットワーク構造の探索ができます。
    Auto-Kerasという名前から、中身は主にKerasが使われていると思っていたのですが、コードをみるとPyTorchがよく使われています。ただし、生成したモデルをKerasのモデルとして保存することが可能となっています。

    Auto-Kerasの導入

    Ubuntu16.04で試したところ、以下のようにして問題なくインストールできました。

    PyTorchやTensorFlowなどのライブラリがインストールされるので、少し時間がかかります。

    Auto-Kerasを用いた実験

    Auto-Kerasを使って画像分類問題を解くためのモデルを生成するときのコードと実験の結果を示していきます。なお、実験にはAuto-Kerasの0.3.7を用いています。またモデルの学習時にはNVIDIA社のGPUのGeForce GTX 1080を用いています。

    データセット

    実験ではKuzushiji-MNISTというデータセットを使うことにします。
    このデータセットは古い書物から10種類のくずし字のひらがなを集めたものです。よく使われるデータセットとして、0~9の手書き数字の画像を集めたMNISTがありますが、それの日本語版のようなものです。例えば以下のような文字がデータセットに含まれます。

    semantic_label

    https://github.com/rois-codh/kmnist

    皆さんは読めるでしょうか?残念ながら私にはあまり読めません。

    Kuzushiji-MNISTのページの下の方を見ると、このデータセットに対してディープラーニングのモデルで98.90%のaccuracy(モデルの予測の正解率)が出たという記録が載っていますので、Auto-Kerasを使って98%程度のaccuracyになると良いなという期待をして次の実験に進みます。

    Auto-Kerasの使い方とモデルの性能

    Auto-Kerasによってモデルのネットワーク構造とハイパーパラメータの探索をおこなうコードは以下のようになります。

    学習に使いたいデータを読み込んで、それをAuto-Kerasのfitメソッドに渡しているだけです。fitメソッドでネットワーク構造とハイパーパラメータの探索をおこなっていますが、time_limitが探索をおこなう時間の上限になります。単位は秒なので、上記の例では12時間です。
    fitの内部では、渡したデータ(コード中のx_trainとy_train)を学習用と検証用に分けて使用しています。また画像の分類問題では、通常は入力する画像の正規化をおこないますが、これも内部で自動的におこなっています。

    一番良いモデルのネットワーク構造とハイパーパラメータが見つかったら、それらを使って再度学習をおこないます。ただし、先ほどのfitとは異なり、x_trainとy_trainを学習用と検証用に分割せずにそのまま学習に使用することで、データを有効活用します。final_fitでこれをおこなうことができます。また、final_fitで得られたモデルはAuto-KerasかKerasで読み込める形で保存できます。final_fitとモデルを保存するコードは次のようになります。

    次にfinal_fitで得られたモデルのaccuracyを計算してみます。

    上記を実行した結果、テストデータのaccuracyは98.64%でした。98.90%には至りませんが、それに近い性能となっています。

    今回の実験では12時間で50モデル生成することができました。これらのモデルの検証用データでのaccuracyの変化を次のようにプロットしました。
    model_acc
    横軸のmodel idが小さいものから順にモデルが生成されています。1個目のモデルは96%程度のaccuracyですが、2個目のモデルからは99%前後となっています。12時間で50モデル作りましたが、10モデル作れば十分だったかもしれません。

    Auto-Kerasで得られたモデルの構造

    Kerasのモデルとして読み込んで、モデルのネットワーク構造を確認したいと思います。次のようにしてネットワーク構造を描画しました。

    上記のコードを実行した結果、次の画像が生成されます。
    model_arc
    それなりに深いネットワークで、とても縦長になってしまいました。
    ネットワークの中身をみると、Residual Networkで使われているResBlockの存在が確認できます。Auto-Kerasの内部ではResBlockやDenseBlockが定義されていますので、その中から選ばれてきたようです。

    終わりに

    今のところは適用できるタスクが限られていますが、画像の分類や回帰の場合にはAuto-Kerasを使って楽をするのも良いかもしれませんね。

    給与交渉について思うこと。あなたの価値って何ですか?

    給与交渉について思うこと。あなたの価値って何ですか?

    こんにちは!
    採用担当の池田です。

    最近のニュースで、新卒の就活においてセクハラが横行しているとの記事を見ましたが、権力乱用も甚だしいですね。怒りでしかないです。

    • OB訪問の流れでお酒を無理やり飲ませる
    • 内定をちらつかせて、異性としての関係性を持ちかける

    こういうことを平気でやっちゃう社員の人って何を考えているんですかね?はっきり言って意味不明です。即刻退場でしょう。

    ただ、おそらくこういうことって今に始まったことではなく、昔からも横行していた可能性もあるので、記事として明るみになった現時点で、ある程度のパワープレーで止めないと、水面下ではずっと続いてしまうと思うんですよね。

    見せしめとして、企業名を公表し、相応の処罰を与えるべきかなと思います。

    ちなみにこの記事に対する社会人の方のコメントとして、

    • 就活生はお酒に誘われても行かないまたは飲まない
    • 夜にOBOG訪問は実施しない
    • 社員にセクハラまがいな言動を受けたら、強く抗議して逃げる

    等が散見されましたが、そんなの無理でしょって思うんですよね。

    それがはっきりできない状況・心理だからこその事件だと思うので、就活生側にはもちろん危機意識を持ってほしいものの、社会人の常識やモラルをより一層問う必要があると考えました。

    さて今回は転職時において重要な給与交渉について触れたいと思います。

    希望年収を伝えるのはドキドキ

    転職経験がある方は、必ずと言っていいほど面接時に、
    希望年収はありますか?
    との質問を受けると思います。

    私自身も面接官として必ず聞くようにしていますが、面接官の立場にいると、候補者の方が言いづらそうだなーっと思って見ちゃっています(笑)
    やっぱり日本人だなと思うのが、お金が絡むことをはっきり伝えるのは慣れていないのか、皆さんこの質問をするとモジモジしますよね。私自身も転職時はモジモジした記憶がありますので、お気持ちはすごく分かります。

    ただ、候補者側にとってみると年収ってかなり重要要素じゃないですか?転職理由の一つに給与への不満を挙げられる方ってめちゃくちゃ多いので、にも関わらず本音ベースで話せないのはもったいない。また企業側にとっても重要要素で、いくら優秀な人材だと判断しても、希望年収が想定よりもかなり上だとオファーに躊躇するので、候補者と企業の双方にとって重要にも関わらず、何だかフワッとしちゃっているのは宜しくないなと。

    ちなみに求人票に記載されている給与レンジって正直適当なことが多いです(笑)適当って言うと語弊があるかもしれませんが、多くの日本企業は現職年収を考慮して年収を提示することが多いので、例えば求人票では「条件:800万~1000万」となっていても、現職給与が500万の場合は書類で落ちることがほとんどでしょうし、仮に面接に行けても800万以上提示されることはあまりないのではないでしょうか。

    少し話が逸れましたが、こんなに重要な要素にも関わらずあまり深く触れることができないのはもったいないなと思っています。

    またまたちなみに、、、になりますが、現実的に多い希望年収の提示パターンは大きく4種類に分類されます。
    ※あくまで私の経験談

    タイプ 条件提示内容
    タイプ① 現職給与より50万下げる
    タイプ② 現職程度かそれ以上
    タイプ③ 現職給与より50万上げる
    タイプ④ 現職給与より100万以上上げる

    予想できるように、私の経験上だと圧倒的にタイプ②が多いですね。日本人っぽい回答でしょう(笑)
    タイプ①もそれなりにいますが、このタイプの方は「未経験職種にチャレンジするから仕方ないよねパターン」と「成果出したら給与上げてよねパターン」に分けられるかと思います。

    前者に関しては分かりやすいと思いますが、昨今はどこも人手不足なので、未経験歓迎の企業や職種もたくさんあります。未経験の場合は現職と同程度のパフォーマンスはすぐに出せないから仕方ないと考えて、今より50万程度下げての提示がスタンダードになっている感じです。おそらくエージェント側の入れ知恵でしょう(笑)

    後者に関してはそこまで多くはない印象ですが、優秀な方または自信がある方に多いですね。企業側として好感度は高いと思います。
    というのも、今の職場でいくら評価されていても、その裏には企業文化を理解し、社員との関係もあってこその成果だと思うので、その武器がなくなる新天地(転職)においては、いきなり同等のパフォーマンスをすぐに出すことは不可能という判断です。そのため、転職時は現職より下がっても致し方ないと。
    ただ、とはいえ会社や仕事に慣れてきて、期待する以上の成果を出した時にはしっかり給与上げてよね、という裏側のメッセージもあるかと思いますので、それを無下にして内定を出すのは失礼です。企業側はその意図をしっかり理解する必要があるかと思います。

    さてようやく本題に入りますが、今回のブログでは、「おすすめの給与交渉の方法」等のつまらないものを伝えるものではありません。私個人の給与に対する考え方をお伝えしたいと思います。

    “成果を出している”社員の給与は低過ぎる

    昨今、「日本の給与はグローバル基準で低過ぎる」と言われており、優秀な方が海外へ行かれるケースが増えているという記事を見かけることが多くなりました。
    私は海外で就職したことはないですし、海外企業に詳しい専門家ではないのでとやかく言える権利はないですが、確かに日本の給与でおかしいなーっと思うのは「年功序列型」の給与体系です。

    私が新卒で入社した1社目は金融機関だったのですが、

    あのおじさん、出社していつもだらだら新聞読んでいるだけにしか見えないけど、年収1200万貰ってるの???
    みたいなことって若手の間で頻繁に話に上がっていました。

    日本の企業のほとんどが年齢が上がっていくにつれて給与が上がっていくシステムになっているので、成果を上げていなくても給与が自動的に上がっていきます。

    これは高度成長期に生まれた給与体系だと聞いているのですが、年齢が高い人のほうが仕事が出来るし、偉いみたいな考えがあったからなんでしょうかね。

    個人的には成果を上げていないにも関わらず高い給与を貰っている方に対してどうこう言うつもりはなく、むしろ特に成果を上げなくても高い給与がもらえる企業を選んだその人が凄いと思うんですよね。それはそれでありかなと。

    ただ気になっているのは、成果を上げているにも関わらず、会社の決まりによって給与が上がらず、モチベーションを下げている社員がいるということです。これは非常にもったいないし良くないことかなと。

    最近、メガバンクに勤める方と食事をしたのですが、その人は最近地方支店から本社の某部署(社内では花形と言われている部署みたいです)に異動になり、配属部署には地方支店にはいなかったような優秀な先輩が多いようです。その裏にはほとんどの方が熱心に勉強をしているようで、

    • 海外MBA取得のために業後に英会話スクールに通っている方
    • 会計の知識を得るために簿記1級取得を目指している方
    • 経営に近い仕事にいずれ就きたいと日本のビジネススクールに通っている方

    など、自己研鑽には欠かさない方ばかりだと。さらにその上で、普段の業務では各支店からの問い合わせに即座に対応できたり、大企業の役員を相手にも対等にビジネスの話ができるスキルを持っている方たちばかりとのことで、日々刺激を受けながら業務に食らいついているようです。

    ただ残念ながらそのような先輩たちも銀行で決められた給与体系があるので、いくら成果を上げていても10歳上の方には給与面では負けてしまうこともあります。
    そのような状況だと、そりゃー優秀な方はどんどん転職していきますよね。だっていくら頑張っても表向きは褒められたり評価されても、給与に反映されないのでは面白くないですもんね。

    もちろん給与がすべてではないですが、会社員として働くからには、その人の価値って給与で決まる部分もあると思っているので、意識の高い方ほど正当に評価してくれる企業を求めて転職するのは当たり前のことでしょう。

    こういうのを聞く度に私が思うことは、優秀な20代でも1000万や2000万以上を提示し、逆に仕事をしていないおじさんたちの給与を数百万ずつ下げたらトータル企業としての支出は増えないので良くないですかね???おそらく優秀な若手は今まで以上に頑張って成果を出すと思いますし、一方働かないおじさんたちは不満には思うものの今更辞めないでしょうし、元々成果を出していないのであれば多少モチベーションが下がっても会社にとって大きな影響にはならないでしょう。

    こんな考えを大企業に勤めている友人の人事に伝えたら、「そんな単純じゃねーんだよ」と一喝されましたが、そもそも評価って単純で良いと思うので、全然納得できませんでした。

    成果を出している方の給与は低い、というより正当に給与に反映されていないと思うので、この辺りは早急に変えていかないとボロボロ崩れる企業が出てくるかもしれません。

    とはいえ、、、メガバンクの方に聞いたら、やはり安定志向の方が多いので退職する人はかなり少ないとのこと。残念ながらすぐには給与体系の変更はなさそうですね(笑)

    自分が提供できるバリューを正確に理解できていますか?

    上述した内容では「給与が低い」論調に若干同調するかたちになりましたが、一方で私自身、この仕事に携わるようになって、「本当にその希望年収をもらえると思っているの?」と不思議に思う瞬間が多々ありました。

    以前、社会人経験4年目の方が面接に来たのですが、その方は誰もが知っている有名企業で年収は650万ほど。4年目にしては貰っている方だと思うのですが、希望年収を聞いたところ、「最低800万、希望1000万」と言っていたんですよね。

    別に高い年収が悪いというわけでは無いのですが、1000万の年収を得ることの意味って本当に分かっている?と思っちゃったんですよね。

    私は今、採用の仕事をしているので、おのずと経営陣と話す機会が多くなりますが、話していて感じるのは、「稼ぐ社員にはいくらでも給与として還元する」という経営陣の姿勢です。
    別に弊社のアピールをしたいわけではなく、ベンチャーの経営陣は皆そう思っているのではないでしょうか。ただそれが出来ないのは、残念ながら本人が望む給与に見合う稼ぎを出せていないからなのかなと感じています。

    例えば私は採用担当の仕事ですが、「年収1億円希望する」と社長に伝えることは可能ですし、社長も真顔で聞いてくれるとは思います。ただ採用担当が1億円の価値を提供するためにしなければいけないことって何だと思います?

    例えばGAFA(世界的IT企業の、Google、Amazon、Facebook、Appleの頭文字を取った呼称)に所属しているトップクラスのエンジニアを10名以上引き抜けること(個人的つながり等の手段を使う)が出来れば、1億円の給与は支払ってくれるかもしれません。

    理論上の理由は下記になります。

    • エージェント経由で採用する場合、年収に対して35%のフィーが発生する
    • GAFAクラスのエンジニアだと少なく見積もっても年収3000万はあると仮定する
      ※3000万でも少ないでしょうが、計算上簡潔にするために一旦はこちらで設定します
    • 1名採用するのに掛かるコストは、3000万×35%=1050万円
    • 1050万×10名=1億円以上

    上記は単純な計算ですが、本来GAFAクラスのエンジニアを正攻法で採用しようと思った場合、相当な金額が掛かるわけです。
    そこに私、池田というスーパー採用担当者が入ることによって、10名以上採用できるのであれば会社としては支払うことに抵抗は少なくなるのではないでしょうか。
    また、もちろんGAFAクラスのエンジニアなんてエージェント経由使っても採用はまず不可能なので、そういったプレミアムも上乗せすると1億円の価値以上を十分提供できたといえると考えます。

    さて、そういう背景を踏まえて、私は社長に1億円の年収希望を伝えることが出来るでしょうか?

    ・・・はい、無理です(笑)恐ろしくて言えません。

    というより、そんな知り合いおりません。いたらご紹介下さい(笑)

    上記は定量的に示すことができる例ですが、例えばこれがエンジニアだったら、希望年収の裏付けをしっかり伝えることが出来ますか?
    1000万の年収を手に入れるために、しなければいけないことって思っている以上に大変だと思います。だって1000万って日本の平均年収を大きく超えているので、普通に考えれば無理をしなければ到達出来ないラインですよね。

    そういうのを知らずに、

    • 市場的にエンジニアの価値が低く見られているから
    • エンジニアは今後ますます不足していくから
    • エンジニアは日本ではもっと高く評価されるべき

    と市場視点ばかり言っているようでは、なかなか望む年収には届かないと思います。

    稼ぐって難しい

    私は今の会社が3社目で、1社目は金融機関に勤めていたものの、2社目の会社では社員数5名以下の小さなベンチャーにいたのですが、そこで痛感したのが稼ぐことの難しさ。
    私がそのベンチャーに入社した時には既にビジネスモデルが出来ていたので、そこに乗っかればある程度売り上げを立てることはできたのですが、それとは別に新しいことをやろうとしても結局全然稼げませんでした。
    自分の中では何とかもがいて色々やったつもりだったのですが、その中で何とか稼いだ金額って、正味数十万ぐらい。内訳としても講演料や執筆料、また外注費なので、本当に価値として生み出したのは雀の涙ほどしょう。

    単純に私の能力が足りなかっただけなのでそれを読者の方に押し付けるつもりはありませんが、例えば今から1か月の時間を与えられて何でも良いから稼ぎなさいと言われたときに、皆さんは稼げる自信ありますか?
    時間売りは駄目ですよ。

    そのような状況下でも稼げる自信がある方は素晴らしいと思いますが、少なくとも私は出来なかったですし、多くの方も稼ぐ方法って教わっていないし経験していないはずなので、大企業にいる方ほど難しいことだと思います。

    つまり私がこうやって普通に生活できているのって、会社という枠組みやビジネスモデル、優秀な経営者やエンジニアがいるからこそ成り立っているわけで、私一人では1円の価値も生み出せないんですよね。

    だからこそ、私自身が年1回の昇給時に上司である社長と話すときには、そういう背景も踏まえて社長にすべて委ねるようにしています。

    私の希望はないので、社長が私の価値(給与)を決めて下さい、と。

    自分の評価は周りが決めるものだと思っているので、私はこういう考えでしばらく過ごすと思います。
    ※こんな感じでカッコよく伝えちゃっていますが、考えがコロコロ変わる人間なので、1年後には「給与交渉ではガンガン高い金額を提示すべき!!!」みたいになっている可能性もあり得ます(笑)

    少し偉そうなことを伝えてしまいましたが、自分が本当に発揮できるバリューは何で、それって金額に置き換えるとどのぐらいなのかをしっかり理解しない状況で希望年収を伝えることはあまりお勧めしません。

    今の転職市場は人手不足が影響しているので、転職時に給与が上がることは普通と考えがちですが、今後数十年間働く中で、目先の数十万や数百万の給与にこだわること以上にすべきことがあるんじゃないかなと思っています。

    最後になりますが、今回はあくまで個人的見解なので、会社の見解では一切ございません。ただ、今後転職を控える方で給与に不満がある方は、一度立ち止まって考えて頂くきっかけになればと思って書かせて頂きました。

    ディープラーニングをやらないPyTorch入門

    こんにちはtetsuです。

    今回はPyTorchの入門的な記事となります。PyTorchを使ったディープラーニングのサンプルコードはよくありますが、それとは別の方法で説明していきたいと思います。PyTorchでおこなう処理の流れはディープラーニングを扱う場合と変わりませんので、計算の本質的な部分はある程度この記事で理解できるようになることを目指します。

    PyTorchを使って解きたい問題、解き方

    問題設定

    今回は

        \begin{equation*}y = x^2 - 2\end{equation*}

    に対してy=0となるようなxを求める問題を解いていこうと思います。この問題の答えは手計算によってすぐに求まり、

        \begin{equation*} x =  \pm\sqrt{2} \approx \pm 1.41421356\end{equation*}

    となりますね。簡単すぎるかもしれませんが、答えが分かっている問題を解いたほうが計算が追いやすく、理解の手助けになるかなと思います。

    解き方

    先程設定した問題では手計算ですぐに答えが求まるので、次から説明することは回りくどく思うかもしれませんが、ディープラーニングのライブラリの計算方法を理解する上で必要な話になります。

    ディープラーニングでは勾配降下法という手法をベースにしたものを使って解を求めていきます。
    この勾配降下法を使う際には損失関数というものを定義する必要があります。損失関数をより小さくすることができるxが見つかったとき、より良い答え(\pm \sqrt{2}により近いx)が求まる、というような観点で損失関数を設計します(機械学習においては過学習の話を出すとこの限りではありませんが、置いておきましょう)。今の問題で考えると、y0との差が小さくなるxを求めたいので、例えば次のような損失関数Lを最小化できれば良さそうです。

        \begin{equation*}L=(y - 0)^2 = y^2 = (x^2 - 2)^2.\end{equation*}

    この損失関数をグラフにしておきます。赤丸はそれぞれ(\sqrt{2}, 0), (-\sqrt{2}, 0)をあらわします。
    treeshap_force

    勾配降下法では損失関数Lを微分することで勾配を求めます。今回の場合には勾配は次式であらわされます。

    (1)   \begin{equation*}\frac{d L}{d x} = 4x(x^2 - 2). \end{equation*}

    実はこの勾配にマイナスを掛けた方向にxを移動させることで、Lを小さくすることができます。そのため、次式のようにxを移動させます。

    (2)   \begin{eqnarray*}x \leftarrow x - \gamma \frac{d L}{d x} = x - \gamma 4x(x^2 - 2).\end{eqnarray*}

    ここで\gammaは学習率と呼ばれるもので、どれだけxを動かすかを制御する値になります。学習率が大きければ、xは大きく移動することになります。大きすぎると移動しすぎる可能性もありますが、小さすぎるとほとんど移動しないため、いい塩梅の値を見つける必要があります。
    ここまで説明したような①「勾配を求める」②「xを移動」という2つの操作を繰り返すことで、Lを小さくする方向に少しずつxを移動させていきます。残念ながら勾配降下法では一回で答えが求まるわけではなく、ちょっとずつ答えに近づけていきますが、この方法によって、人間の手計算が困難な場合でも最小値あるいは極小値をとるxの近似値を求めることができます。

    PyTorchのコードと説明

    ここまでに説明した解き方をPyTorchを用いたプログラムにしたものが以下です。なおPyTorchのバージョンは1.0を想定しています。

    プログラムの内容について確認していきます。

    • 5行目でxの初期値を決めていきます。今回はx=1.0としています。勾配降下法では損失関数が小さくなるようにxが動いていくので、初期値の都合上、ひたすら\sqrt{2}の方向へ向かっていきます。先程示した損失関数のグラフをみても分かるとおり、x=1からx=-\sqrt{2}へ移動するには一度損失関数の値が大きくなる必要があるため、-\sqrt{2}の近くには辿り着きません。またrequires_grad=TrueはdL/dxを計算させるという意味になります。
    • 6行目のloss_func = nn.MSELoss()では損失関数を選択しています。MSELossは解き方のところで出てきた損失関数と同じ役割を担います。
    • 7行目のoptimizer = optim.SGD([x], lr=0.01)ではxを移動させる方法としてSGDを選んでいます。SGDは確率的勾配降下法と呼ばれ、説明した解き方と同じ働きをします。lr=0.01では学習率を0.01と定義しています。[x]の部分はSGDで移動させていく変数になります。ディープラーニングではここに指定する変数がたくさん出てきますが、今回はxのみです。
    • 11行目では勾配の計算結果を0で初期化しています。13行目で損失関数の値を計算し、それを利用して14行目で勾配を計算しているのですが、内部的には「(Lの勾配) +={d L}/{d x}」というように、代入ではなく加算がおこなわれます。このため、11行目の処理で一旦勾配の値の初期化が必要となります。
    • 16行目では計算した勾配を用いてxの移動をおこなっています。

    このプログラムは勾配降下法の各反復ごとのxとそのときのydL/dxの値を標準出力しており、実行してみると次のように表示されます。一番上の行は初期値のxで計算した値であることに注意して下さい。

    初期値に対応する勾配dL/dxですが、これは式(1)を用いて

        \begin{equation*}\frac{dL}{dx} = 4x(x^2 - 2)= 4 \times 1 \times (1 - 2)= -4\end{equation*}

    と計算したものと等しいことが確認できます。
    またその次の行でのx1.04ですが、式(2)を用いて

        \begin{equation*}x \leftarrow 1 - 0.01 \times -4 = 1.04\end{equation*}

    と計算したものと等しいことが確認できます。
    100反復後にはx=1.4142133ですので、おおよそ\sqrt{2}となっていることが確認できます。単精度で計算していますので、精度はこの程度が限界です。

    終わりに

    今回は簡単な方程式をPyTorchを使って解かせる例を示しました。ディープラーニングを用いたコードも似たような流れで処理をおこないますので、導入として参考になれば幸いです。