Nerds N' Computers

ソフトウェア技術や思ったことについて書きます.

ソフトウェア技術や思ったことについていろいろと書きます.

CMUでの博士課程を振り返る

はじめに

前回の投稿からだいぶ時間が空いてしまいましたが、2025年10月24日に博士論文の審査(Thesis Defense)を無事に通過し、まもなく博士号を取得する予定となりました。 振り返ってみると本当にさまざまな出来事があり、少し雑多な内容になってしまいましたが、記憶が新しいうちに振り返りの記事としてまとめておこうと思います。

研究

CMU入学当初は主に3Dコンピュータビジョンの研究に取り組んでいましたが、2024年頃からロボティクス分野へと研究の軸を移し、現在は3次元情報を活用した模倣学習を中心に研究を行っています。 この5年間で主著5本、共著5本の論文を発表することができ、特に、毎年1本は主著でトップ会議に通すという目標を継続的に達成できたことは大きな自信につながりました。研究や論文執筆の過程では、指導教員のKris先生、Meta Reality Labsの斎藤さん、Toyota Research Institute(TRI)のSergeyから多くのことを学びました。

博士課程を通じて、世界トップレベルで活躍する優秀かつ高い志を持つ研究者や仲間たちと切磋琢磨し、深い交友関係を築けたことは一生の財産です。振り返ると、海外でPhDを取得するという選択は、間違いなく人生で最良の決断のひとつだったと感じています。

もちろん、海外PhDは誰にでも勧められる選択ではなく、競争も激しくハイリスク・ハイリターンな面があります。しかし、現状ではアメリカや欧州のトップ大学で人工知能やロボティクスの研究を行う日本人PhD学生は、まだ両手で数えられるほどしかいません。そうした状況を考えると、より多くの人が海外で挑戦することは、中長期的に日本の研究力強化にもつながるのではないかと思います。

主観的な印象ではありますが、人工知能分野における日本の研究は、世界の最前線に比べて2〜3年ほど遅れているように感じます。その大きな要因の一つは、トップ大学や研究者コミュニティに日本人がほとんど参加できていない点にあると考えています。こうした国際的なコミュニティに属するためには、研究実績に加えて、長い時間をかけた信頼関係の構築と、ギブアンドテイクの関係が欠かせません。

一方で、そのようなコミュニティの一員となることで、自然と最先端の研究動向に触れる機会が増え、結果として研究成果にも良い循環が生まれるのだと思います。今後もアメリカで研究を続ける予定なので、微力ながらその好循環を日本にまで広げていく一助となれればと考えています。

インターンシップ

アメリカのCS博士課程の学生の多くは、夏休みの期間に研究インターンシップを行います。期間はおよそ3ヶ月で、月給は約$9,000(130万円前後)、さらに家賃補助として月$3,000(約45万円)が支給されるのが一般的です。 インターンの内容は企業によってさまざまですが、多くの場合、トップカンファレンスでの論文発表を目指した研究プロジェクトに取り組みます。

もちろん、3ヶ月という短期間でプロジェクトを完結させるのは容易ではないため、秋セメスターまで延長してCVPR、ICLR、NeurIPS、IROSなどに論文を投稿するケースも少なくありません。 僕自身はこれまでにMeta、TRI、Appleインターンを経験しましたが、どのインターンも非常に刺激的で、本当に楽しい時間でした。アメリカのインターンシップでは、学生にも比較的大きなプロジェクトを任せてもらえることが多く、そのまま就職に直結する場合もあります。そのため、多くの学生が朝から晩まで研究に取り組みます。その分、同期との一体感も強く、インターン仲間とは今でもとても仲が良いです。

少し話が逸れますが、アメリカではインターンシップのポジションを見つけること自体が非常に難しいです。これは、企業がリファラル経由の採用を好む傾向があるためです。 僕の場合も、CMUや過去のインターンで出会った友人に、自分の研究分野に関連するチームを紹介してもらい、そこから面接につながることが多くありました。逆に、紹介なしで応募した場合は、ほとんど返信が返ってこなかったので、やはりリファラルの重要性を痛感しました

就職活動

8月ごろから就職活動を始め、最終的にAppleとTRIの2社からResearch Scientistとしてのオファーをいただきました。どちらの企業とも過去にインターンシップを通じてお互いのことをよく理解していたため、面接は非常にカジュアルで、約1週間ほどでオファーをもらうことができました。 オファーを受け取った後には、金額面で少し交渉を行い、最終的には研究内容との相性がより良かったTRIのオファーにサインしました。

金額の詳細は控えますが、博士課程修了後の新卒Research Scientistの場合、総報酬(Total Compensation)はおおよそ$350K〜500K(約5,000万〜7,600万円)程度に収まるケースが多いと思います。 アメリカでは能力や実績によって報酬が大きく変動するため、なかには年収が$1M(約1億5,000万円)を超える研究者もいると聞きます。まさにプロスポーツ選手並みの待遇ですが、この状況がいつまで続くのかは正直わかりません。

健康・メンタル面

運動習慣を持つことは本当に大切です。僕は週に2〜3回ほどクライミングを続けていました。 それから、博士課程の友人を持つこともとても重要です。博士課程の間は、週に1回は大学の仲間とご飯に行ったりして、研究以外の時間も共有するようにしていました。

いろいろ述べましたが、結局のところ、研究がとても楽しかったことと、博士課程の間は月におよそ$3,400(50万円)の給与が支給されたため金銭的な不安が少なかったことが、心身ともに健康に過ごせた一番の理由だったと思います。

英語

現地では日本人の友人がほとんどいなかったため、自然と英語を話す機会が多く、そのおかげで英語に苦労することはほとんどなくなりました。アメリカに来た当初は英語が本当にひどかったので、その時に支えてくれた友人たちには感謝しかありません。

国際学会などでは、企業が主催するパーティやネットワーキングイベントが頻繁に開かれていますが、日本人の参加者を見かけることはあまりありません。話を聞いてみると、英語への自信のなさが大きな理由になっているようです。 英語は結局のところ、話した分だけ上達するものだと思います。最初のうちはつらいですが、少しずつでも話す機会を増やしていくことが、最も確実な上達の道だと感じます。

これから

来週からToyota Research Institute (TRI)にてResearch Scientistとして引き続きロボティクスの研究を行います。もしベイエリアに来る研究者の方で興味ある方がいれば連絡してください。時期によりますが、オフィス見学なども多少できると思います。 アメリカの博士課程は長く厳しい道のりでしたが、精神面・金銭面の両方でサポートしてくれた妻や、大学の友人に恵まれていたおかげでなんとか乗り越えることができました。

この5年間は間違いなく、人生の中で最も密度の濃い時間だったと思います。本記事を通して、少しでも海外PhDの魅力や実情がお伝えできたら幸いです。

From Shun

アメリカでCS博士課程に合格するための戦略について考える

はじめに

この記事で書かれている内容は2022年2月現在の内容であり、筆者の個人的な見解を多分に含みます。 出願までのプロセスについては、日本の学部からアメリカのコンピューターサイエンス博士課程に出願する - あさりさんの作業ログ船井財団の奨学生の方々の報告書に詳細がまとまっており非常に参考になると思います。

自己紹介

2018年に東京工業大学電気電子工学科を卒業し、大学院進学時の転学科を経て情報理工学院の修士課程を修了しました。 修士課程の最終年度に米国大学院博士課程を受験するも全滅し、CMU Robotics Instituteの修士課程(Master's in Robotics)のみに運良く合格し進学しました。 その後、同学科のPh.D.プログラムから正式にオファーをいただき、2022年9月よりCMU Robotics Insituteの博士課程に進学予定です。

アメリカにおける出願事情

近年、アメリカCS博士課程は人工知能ブームが相まり競争が非常に激化しています。 例えば、CMU Robotics InstituteのPhDプログラムでは800人程度の出願に対して合格人数は35人程度(合格率約4%)と非常に狭き門となってるようです。 そのため、中国やインドを始めとする世界中の優秀な学生に対して出願パッケージを差別化し、アピールしていくことが重要になってきます。

合格するための戦略について考える

日本の大学から米国のCS博士課程に出願する際の基本的な戦略としては、以下の3つが主に考えられます。

  1. 学部の早い時期(学部2年ごろ?)から研究に取り組みトップ会議のワークショップや2ndや3rd Tierの会議への採択を目指す(トップ会議の論文があったらベスト)。その後、学部から直接出願する。この場合は研究実績よりもポテンシャルをより重視される場合が多いです。論文が出願時点で採択されていなくても、一定の研究経験があれば合格を得られる可能性があります。
  2. 修士まで日本の大学で研究に取り組み、トップ会議への論文の採択を目指す。この方法だと、志望大学の教員との研究経験やコネクションなどがない限り、基本的に最低一本はトップ会議に論文が採択されていないと合格はかなり難しいです。
  3. 米国大学院の修士課程に進学し、研究実績を積みながらトップ会議での論文採択を目指す。修士卒後で論文がない場合でも修士課程なら合格をもらえる可能性が高いです。授業と並行しながら研究を行うのは非常に大変ですがやりがいは大きいです。コースワークベースのプログラムではなく、CMUGeorgia Techなど一部の大学が提供する研究ベースのプログラムなどでは財政的支援を得られる場合もあります。

正直言って、どの方法も簡単ではありません。僕の場合は決断が遅く、2および3の選択しか残されていませんでした。結果的に最後の頼みの綱である3でなんとかなりましたが、1および2の戦略をまずは検討されることをおすすめします。 次に、出願パッケージのそれぞれの項目の重要度について(主観的ではありますが)少し解説したいと思います。

研究経験・実績

なにがともあれ、研究経験がなければ博士課程に合格することはできません。 これは必ずしも論文が必要ということを意味しないのですが、周りを見ている限りトップ会議の筆頭論文が少なくとも1本ないとCSトップ校への合格は難しいと思います。 日本では学部時代から研究室に所属することは一般的ではありませんが、直接教授などに連絡を取るなどすれば受け入れてくれる場合もあると思います。 早い段階で研究に取り組み始めることで、出願までに一定の研究経験・実績を積むことができるはずです。

推薦状

推薦状は唯一の客観的な資料になります。そのため、選考過程において研究実績と同程度(かそれ以上)に重要視される場合が多いです。 基本的には3通の推薦状が必要になり、2通以上は教授から書いてもらえることが望ましいです。 応募者自身がコントロールできないところではありますが、普段から自発的に研究をすることで良い推薦状を書いてもらいましょう。 逆に言えば、少しでも悪い推薦状を書かれそうな場合は、他の人に頼むなどの戦略も重要です。 僕は、1) CMU修士課程での指導教員, 2) 共同研究プロジェクトのPI, 3) 東工大修士課程での指導教員に書いていただきました。

Statement of Purpose (SoP)

大事だと思いますが、上記2つほどではないです。文法や単語などのミスはご法度なので、添削は何度もしましょう。 参考までに僕は下記のような流れで書きました。

  1. イントロ: PhDを通して目指したい将来像など
  2. 研究経験: 2段落に分けて今までの研究経験など
  3. 応募理由: 志望大学・教員を選んだ理由など

TOEFL

TOEFLに関しては100点を超えれば基本的に十分です。すべてのセクションで少なくとも20点は超えていた方が良いと思います。 勉強方法に関しては人それぞれかと思いますが、受ける前に目標点数を決めるのではなく一旦受けてみて自分の実力を知るのが大事です。 僕は初めて大学2年時にTOEFLを受けたときに70点代後半で絶望した記憶があります。 その後、研究室で英語をしゃべるように意識したり、インプットをなるべく英語に統一するなど意識することで最終的には106点まで伸びましたがスコアメイクにはかなり苦労しました。

GRE

GREを受け付けない大学も多くなっているので、まずは志望大学がスコアを必要としているか調べましょう。 点数に関してはQがそこそこ取れていて出願パッケージの他の項目が魅力的であれば、あまり気にされないと思います。 僕のスコアはV:145, Q:169, W: 3.5というお世辞にも良いとは言えないスコアでしたが問題ありませんでした。 GREを勉強する時間があったら、研究に時間を充てるほうがいいと思います。

奨学金

日本以外からの留学生を見ている限り、奨学金は合格には必須ではないように思います。ただ、一定の倍率を突破して奨学金に採択されていることはそれだけで一定の能力の証明になりますし、教員の財政的負担を減らすことができるので、応募資格がある場合は必ず応募しましょう。学校推薦が必要な奨学金は応募期日が早いことが多いので、早めに情報を確認されることをおすすめします。

事前コンタクト

事前コンタクトは重要ではあると思いますが、基本的には何も実績がない状態でメールを送ってもほとんど返ってきません。 それでも、少しでも可能性を上げるために必ず志望教員にコンタクトは取ったほうがいいと思います。 今までの研究の実績、志望研究室でやりたい研究について簡潔に書いて "Inquiry about potential PhD opportunities from Fall 20xx" のようなタイトルでメールを送るといいでしょう。

これからアメリカでCS博士課程を目指す方へ

博士課程合格への道のりは不安定なだけでなく、とてもストレスがかかります。僕は結果が出るまで毎日GradCafe(受験結果を投稿できる掲示板)を見ながらやきもきしていました。 もし受験に関して不安であったり、質問があればsiwase@cs.cmu.edu宛にメールをいただければ時間のあるときに答えられると思います。気軽に連絡してください。

by Shun

カーネギーメロン大学での1年目を振り返る

カーネギーメロン大学(以下CMU)Robotics Instituteにて修士学生として留学を始めてから、約1年が経ちました。 パンデミックの最中で授業・研究がすべてオンラインになるなど、なかなか荒々しいスタートではありましたが、人生において最も大きな学びのあった1年でした。 この記事では、記憶が新鮮なうちに授業・研究に関して、この1年間の個人的な感想をまとめたいと思います。 あわせて、米国大学院留学(特にコンピュータサイエンス分野)を検討している方向けに、私の所属するプログラムについても簡単にご説明します。

ピッツバーグの有名建築である落水荘(Falling Water)

所属するプログラムについて

私は現在、Master of Science in Robotics(以下MSR)という2年間の修士課程に所属しています。 米国では一般的に修士プログラムではコースワークのみを提供する場合が多いですが、MSRは研究(修論発表)とコースワークの両方を要件とするプログラムになっています。 制度としては日本の一般的な修士課程に近いです。そのため、私の所属する学科では博士課程に直接多くの学生を受け入れることはせず、修士課程修了後に博士課程へ内部進学するのが一般的となっています。 これは、米国の研究ベースの大学院プログラムでは修士課程を設けていない場合が多いという点でユニークだと思います。

修士課程から博士課程に内部進学する際には、内部での競争(正直、競争というほどピリピリした雰囲気ではありません)を勝ち抜く必要があります。 ただし実際には、博士課程への進学希望者は内部進学ができなかった場合でもトップ大学の博士課程に進学できているケースが多いです。卒業後に企業へ直接就職する学生も一定数(正確な数字はわかりませんが20〜30%程度)います。 米国の博士課程は5〜7年程度かかるのが一般的ですが、学部卒業直後にこの決断をするのはやはり難しいです。 そのため、まず2年間の研究ベースの修士課程を経験することは、自身が研究にどの程度の興味や適性を持っているかを知る良い試金石となると思います。個人的には、このような研究ベースの修士プログラムが米国でもっと増えると嬉しいです。

次に、多くの方が気になるであろう修士課程の費用についてご説明します。 一般的に米国の修士課程はコースワークのみを前提としていることが多いため、授業料および生活費は基本的に自費で賄う必要があります。 CMUは米国でも授業料が非常に高いことで有名で、年間5万ドル(約600万円)程度の費用がかかります。これに生活費を加えると年間8〜9万ドル(約900〜1000万円)になります。 しかし、MSRは研究ベースの修士プログラムということもあり、企業や研究機関との共同研究によるファンディングを通して授業料のサポートを受けている学生が多いです(指導教員によっては生活費のサポートもある場合があります)。 私の場合は、幸いにも指導教員および吉田育英会から授業料と生活費(約$3,000、33万円/月)の支援をいただくことができています。 日本にいた頃は授業料や生活費を自分で払っていたため、仕事と研究の両立が非常に難しかったのですが、その点で留学後の1年間は非常に恵まれた環境で研究に取り組むことができたと感じています。

手が小さいのかピザが大きいのか

授業

この1年間で4つの授業を受講しました。 日本の感覚からすると少なく感じられるかもしれませんが、すべての授業が週5〜10時間程度かかる課題を2週間ごとに課すスタイルであったため、日本の大学院で倍の数の授業を受けるのと同等の負担でした。 研究と並行して授業をこなすのは大変でしたが、クラスを通してできた友人と一緒に悩みながら(時には文句を言いながら)課題に取り組めたので、精神的にはとても楽しめました。

授業そのものは、さすがCMUというクオリティでどれも素晴らしかったです。特に課題は非常によく練られており、研究の基礎力を身につけるうえで大変役立ちました。 また、教員や学生のモチベーションも高く、授業中の質問やディスカッションを通じて深い理解を得ることができたと感じています。 さらに、最新のトピックをきちんと扱っていたのも良かったです。日本の大学院にいた際には、スライドの更新が5〜6年前で止まっている授業も多くあり、母校にはもう少し頑張ってほしいと思ったほどです。 それぞれの授業の簡単な感想はこのような感じです。

16-720 Computer Vision (Fall 2020)

古典的なコンピュータビジョンのアルゴリズムから深層学習まで幅広いトピックを扱った応用クラスです。控えめに言っても本当に最高の授業でした。 授業ではアルゴリズムの歴史的経緯や理論的背景について学び、課題ではそれぞれのアルゴリズムPythonで実装しました。 DLTアルゴリズムを用いたホモグラフィ行列推定、PnPアルゴリズムを用いた姿勢推定、ハフ変換、SIFTアルゴリズムなどを自分で実装するのは非常に楽しく、同時並行で行っていた研究にも大いに役立ちました。授業を侮ってはいけないと痛感すると同時に、こうした教育こそがCMUの高い研究力の源泉になっているのだと実感しました。

16-811 A Math Fundamentals for Robotics (Fall 2020)

ロボティクスにおいて多用される線形代数微分幾何学の基礎を扱う必修クラスです。多くの学生が最初のセメスターで受講すると聞いたので選択しました。 学部時代に学んだ内容を思い出しつつ、ロボティクスでどのように用いられているかを理解することができ、とても有意義でした。内容は少し基礎的でしたが、英語での授業や課題に慣れるにはちょうど良かったと思います。

16-824 Visual Learning and Recognition (Spring 2021)

古典的な学習ベースの画像認識アルゴリズムを中心に、人間の知覚の哲学的側面からFew-shot、Zero-shot物体検出、最新の深層学習モデル(VGG16、ResNet、Transformerなど)、さらには深層強化学習まで幅広く扱いました。 授業に一貫性があまりなく、既に知っている内容も多かったため少し退屈に感じることもありましたが、全体としては良い授業でした。

16-711 Kinematics, Dynamics and Control (Spring 2021)

剛体変換、スクリュー理論、順運動学、逆運動学、PID制御など、マニピュレータ操作に必要な基礎を幅広く学ぶクラスです。 最初は比較的簡単に感じましたが、スクリュー理論に入った途端に授業のスピードが急激に上がり、ついていくのに苦労しました。ただ、課題が非常によく設計されており、授業で理解できなかった部分も課題を通じて理解を深めることができました。 最後の課題でマニピュレータの軌跡が授業名「KDC」を描いた時には、遊び心のある演出に嬉しくなりました。

エンドエフェクタの軌跡をプロットするとKDCの文字が...!!

研究

MSRは研究ベースの修士プログラムのため、私は週1回の指導教員とのミーティングを行いながら、ポスドクの学生と一緒に3次元物体検出に関する研究を進めました。 最初の頃は英語でのミーティングに緊張していましたが、3ヶ月ほどで慣れてきました。 ミーティングでは研究の進捗を報告し、その後に気づきや課題について議論するというスタイルで進めました。毎回良質なフィードバックを得られたおかげで、授業と並行しながらも良いペースで研究を進めることができました。

指導教員やポスドク、研究室の学生が協力的かつモチベーションが高かったため、心理的安全性が確保された環境で適度な緊張感を持ちながら研究に取り組むことができました。 さらに、さまざまな分野のエキスパートが集まっていたことで、研究における試行錯誤の回数を大幅に増やすことができ、それが成果につながったと感じています。 最終的には、主著としてコンピュータビジョンのトップ会議ICCVに論文が採択され、第二著者としてIROSとICCVにそれぞれ1本ずつ論文が採択されるという、非常に良い成果を得ることができました。

間違ってもアメリカでダブルサイズのアイスを頼んではいけない

まとめ

留学前までは長期留学の経験もなく、トップ会議での論文もなく、博士課程出願では全滅していたため、CMU修士課程修了後にトップ大学の博士課程に進学できるか不安でした。 しかし、今年はすべての授業でAまたはA+を取得し、アカデミアでの初めての成功体験も得ることができました。今後の博士課程出願では、どこかしらに合格できればと思っています。

また時間があるときに、現在住んでいるピッツバーグのことや、もう少しプライベートな出来事についても書きたいと思います!

From Shun

vimのカラースキームの設定・編集方法(初心者〜上級者)

背景

このあいだ勉強会の一環で vim・Neovimのカラースキームについて 紹介したので,それをこちらでも記事として残そうと思います. 自分はカラースキームを探したり,環境にあった色にチューニングしたりが好きです.そこで,そういったことをしている中で培って来た知識を「カラースキームってなに?」という人から,「カラースキームを編集したい」という人まで,広く浅く紹介したいと思います.

他にもcocoponさんの記事なども非常に勉強になると思います.

前提条件

vimの環境によっては異なるカラースキームや設定方法がある可能性があります. 今回はvimとNeovimを使用した場合の2種類で紹介しますが,もし他の設定方法がある場合にはコメント等よろしくお願いいたします)

Neovim: NVIM v0.3.4

勉強会の際に作成したスライド:

はじめに

カラースキームに凝ること,2年.vimの戦闘力はvimrcの行数という説があります. ある意味面白い例えだと思ったので,自分もカラースキームの戦闘力的何かがあれば面白いと思い考えました.

その結果, colorscheme_level.png

というレベル分けで紹介することにしました (他の分け方もあるかと思いますが笑) 今回も,この5段階と分けて紹介をしようと思います!

カラースキームとは

カラースキームとは,簡単に紹介すると

vimの色の付け方を指定するもの

です. しかし,カラースキーム好きとしてさらに踏み込むと,

vimを開きたくなるもの

ですね.

下の図を見ていただくとわかると思いますが,カラースキームの有無で大きく「見やすや・かっこよさ」が異なることがわかると思います.

vim_colorscheme_diff.png

では,実際にカラースキームの設定や編集方法に移りたいと思います.

設定方法

Level 1 - デフォルトのカラースキームを使用

デフォルトってなんだ? と思われる方もいらっしゃるかと思います. 実は,vimはインストールした時点でいくつかのカラースキームが一緒にインストールされます.

自分のmacvimの場合,下記の18種類が入ってました!(ほとんど使ったことがない...) (/usr/share/vim/vim80/colors内に存在しました.)

blue.vim
darkblue.vim
default.vim
delek.vim
desert.vim
elflord.vim
evening.vim
industry.vim
koehler.vim
morning.vim
murphy.vim
pablo.vim
peachpuff.vim
ron.vim
shine.vim
slate.vim
torte.vim
zellner.vim

レベル1ではこの辺を設定するところから始めたいと思います.

一時的に反映

:colorscheme コマンドについて

カラースキームの設定方法の前に,いくつか便利なコマンドを紹介したいと思います.

まず,vimの画面上でどんな感じになるか確認したいと思われる方もいらっしゃるかと思います. vimはそれができます!

vimの画面上で :colorscheme[space][tab] と打つとコマンドライン上にpc内に入っているカラースキームのリストが表示されます.

Screenshot 2019-04-17 at 14.27.13.png

この状態で, 矢印キーで左右に動き,見たいカラースキームの上で Enterを押すと,そのカラースキームが反映されます.

しかし,これは一時的な反映 であり,再度vimを開くと,元のカラースキームに戻ってしまいます.

全体に反映

全体に反映するには .vimrc 内に記述します.

.vimrc とは

.vimrcとは:

vimの設定を記述する専用ファイル

です.簡単な設定から,パッケージについて等,全てこのファイルに記述します.(正確には他のファイルでも良いのですが,このファイルに最後に source をしないと,反映されません)

ちなみに豆知識で, .~rc 系の設定ファイルをよく見かけるので,rcってなんなんだろうと調べたところ,初期のUNIXの遺産のようで run commands の略ではないかという説があるらしいです.

.vimrc どこにあるんだ

自分が初めてvimを触りだしたところ, .vimrcを見つけられず,苦労をしました.(サイトによって,記述場所が異なっていたり,Neovimだったので,vimとは違って大変でした...)

そこで,簡単に今のvimがどの設定ファイルを読み込んでいるのか見つけられるコマンドがあります.

それがこちら!

:echo $MYVIMRC

こうすることによって,

$ HOME/.vim/.vimrc 
or
$ HOME/.config/nvim/inti.vim 

となります.上記がvimの場合で下記がnvimの場合です.

※ neovimの.vimrcはinit.vimというファイルです

あとは.vimrcに記述するだけ!

.vimrc の場所がわかれば,あとはそこに記述するだけです. 書き方は非常にシンプルで

syntax enable
colorscheme [colorscheme name]

とするだけです.

Level 2 - 公開されたカラースキームを使用

公開されたカラースキームとは

GithubやBitbucketなどのOP上で公開されたカラースキームのこと

と定義しました. 多くの人がこういった,公開されたカラースキームを使用するのではないかと思います.

使用方法として2種類あります. 1. 自分のpc上にダウンロードして使用 2. パッケージを使用してインポートして使用

よく見かける王道のカラースキームは下記のようなものがあげられると思います.

image.png

では,実際にmolokaiを例に設定する方法を紹介したいと思います.

1. 自分のpc上にダウンロードして使用

デフォルトのカラースキームはcolors/というディレクトリ内に存在しました. そこと同じディレクトリに入れる方法もありますが,一般的には下記のようなディレクトリ構造を作成し,その中に入れます.

image.png

注意: 初期状態では存在しない場合,mkdir等で作成してください.

あとは,そこにmolokaiのカラースキームファイルをダウンロードするだけです.

githubからcloneして,./colors/molokai.vimというファイルを先ほど作成した./colors内に移動するだけです.

あとは上記のデフォルトのカラースキームを使用した時と同様のことを.vimrc内に記述するだけです.

syntax enable
colorscheme molokai

2. パッケージを使用してインポートして使用

「自分のpc上にダウンロードして使用」でも良いのですが,新しいカラースキームを取り込みたい時に,いちいちダウンロードして,移動して,と行なっているのは面倒臭いです.

そこでdeinというパッケージを使用して簡単に取り込む方法を紹介したいと思います. そちらのインストール方法などは,また別の話になるので割愛させていただきますが,以下の記事がインストール方法などを紹介しているので是非,使っていない人は試してみてください!

  1. NeoBundle から dein.vim に乗り換えたら爆速だった話
  2. NeoVim、そしてdein.vimへ

(オススメのパッケージに関するスライドはこちら)

実はこのdeinを使用すると2行だけで終わってしまいます. ディレクトリを作成する必要もないです.

call dein#add('tomasr/molokai')
colorscheme molokai

これで全体に反映されてしまいます.

以上がレベル2の紹介です!

では,実際に編集の方に入っていきます.

編集方法

カラースキームを追求していくうちに,編集したくなる欲求が出てくきます(来ない人ももちろんいます)

そこで,実際どう編集するのか,そしてそのための便利ツールを紹介したいと思います.

事前知識

ターミナルについて

vimを使用していると,2種類のterminalに出会います. 1つ目がcterm,そして2つ目がGUIです. これらの大きな違いは色の数です.

ctermは256色しか色がないターミナルです.macのデフォルトはこちらになります. また,色のパレットはXterm colorsというのを使用しています. GUIは名前の通り,グラフィックに適応しているのでhexで色分けがされています.

基本的に,公開されているカラースキームはどちらのターミナルにも対応しているので,中身を見ると

hi Operator guifg=#af0000 guibg=NONE guisp=NONE gui=bold ctermfg=124 ctermbg=NONE cterm=bold

のように,書かれています.それは以下のような意味があります.

image.png

ctermのターミナルの色を変える場合, ctermbg / ctermfg を変更し, GUIのターミナルの色を変えたい場合は guibg / guifg を変更します.

ハイライトグループについて

カラースキームはハイライトグループごとに色が振り分けられています.これらのシンタックスグループは言語をvimに登録する際に決められており,例えば下記のようなものがあります.

image.png

なので,一概に「この色を変えたい!」と言っても,他の要素が影響を受ける場合もあるので十分に注意してから変えたほうがいいです.

ANSIIの設定

image.png

レベル3: 公開されたカラースキームをカスタマイズして使用

では,これらの知識をもとに色を編集する方法を紹介します.

便利コマンド・ツール

その前に,編集を行う際の便利コマンド・ツールについてです.

現在のカラースキームをグループごとの色を知る方法

今のカラースキームが全体的にどのような色分けになっているのか知る方法として以下のコマンドがあります.

:highlight
もしくは省略して
:hi

vimコマンドライン上で打つと下記のような画面が表示されます. image.png

これらは右から ハイライトグループ 表示例 色 です.

Xterm Color Table

いちいちXtermの色を調べるのは面倒臭い上に,現在のターミナルでどのような色になるのか知りたい場合,こちらプラグインが役に立ちます.

gitのREADME.mdにも記述されているのですが,このプラグイン.vimrcに記述するだけで, :XtermColorTableというコマンドが使用できるようになります.

実際,下記のようになります.

https://github.com/guns/xterm-color-table.vimのREADME.mdから引用

シンタックのグループ名を知れる関数

色を帰る際に非常に困るのが,変えたいところのハイライトグループがわからない!ということです. そこで,cohama様のこちらの記事に書かれている関数が非常に便利だったので紹介したいと思います.

function! s:get_syn_id(transparent)
  let synid = synID(line("."), col("."), 1)
  if a:transparent
    return synIDtrans(synid)
  else
    return synid
  endif
endfunction
function! s:get_syn_attr(synid)
  let name = synIDattr(a:synid, "name")
  let ctermfg = synIDattr(a:synid, "fg", "cterm")
  let ctermbg = synIDattr(a:synid, "bg", "cterm")
  let guifg = synIDattr(a:synid, "fg", "gui")
  let guibg = synIDattr(a:synid, "bg", "gui")
  return {
        \ "name": name,
        \ "ctermfg": ctermfg,
        \ "ctermbg": ctermbg,
        \ "guifg": guifg,
        \ "guibg": guibg}
endfunction
function! s:get_syn_info()
  let baseSyn = s:get_syn_attr(s:get_syn_id(0))
  echo "name: " . baseSyn.name .
        \ " ctermfg: " . baseSyn.ctermfg .
        \ " ctermbg: " . baseSyn.ctermbg .
        \ " guifg: " . baseSyn.guifg .
        \ " guibg: " . baseSyn.guibg
  let linkedSyn = s:get_syn_attr(s:get_syn_id(1))
  echo "link to"
  echo "name: " . linkedSyn.name .
        \ " ctermfg: " . linkedSyn.ctermfg .
        \ " ctermbg: " . linkedSyn.ctermbg .
        \ " guifg: " . linkedSyn.guifg .
        \ " guibg: " . linkedSyn.guibg
endfunction
command! SyntaxInfo call s:get_syn_info()

これを.vimrc内に記述すると,:SyntaxInfoというコマンドが使用可能になり,実際にカーソルの下にあるコードのハイライトグループがわかります!link toのリンク先まで知れるのはありがたいです.

表示例: image.png

以上,編集においての便利コマンド・ツールとなります.

一時的に編集をしてみる

実際に全体に反映させる前に,どのようになるのか一時的に編集させる方法があります.

それが先ほども紹介したhighlight / hiコマンドです. 例えば,行番号の背景色を変えたいとした時,赤がどのような感じになるか確認します.

この時,赤をhexの#ff0000とした時,xterm256では1に該当します 1

:highlight LineNr ctermbg=1 guibg=#ff0000
もしくは
:hi LineNr ctermbg=1 guibg=#ff0000

ここで行なった編集は,現在のvimの画面にしか反映がされません. なので,気に入ったものは.vimrcやカラースキームをダウンロードして直接編集しましょう.

全体に反映

.vimrcに記述する方法

感覚で,もし色を変えるのなら,下記のようにカラースキームを設定した後に変えたい箇所の色を上書きすればいいのでは?と思われるかもしれません.

colorscheme foo-bar

highlight LineNr ctermbg=1 guibg=#ff0000

しかし,上記には穴があり,正しい書き方があるらしいです.

その理由を説明しているのがこちらです. 英語+長いので要点だけ取り出すと,以下のことが問題となります.

But you like to try new colorschemes, or you prefer to have different colorschemes for different filetypes or time of the day and your overrides don't carry over when you change your colorscheme.

なので,カラースキームをインポートする前に下記のように記述しましょう.

autocmd ColorScheme * highlight LineNr ctermbg=1 guibg=#ff0000

colorscheme foo-bar

直接カラースキームファイルに記述する場合

この場合はカラースキームファイルをクローンしてきて,変えたいところを探し,置き換えるだけです. ただ,この場合,もしgitに載せたりする場合は著作権などに気をつけるべきですね.

以上でレベル3の編集については終わりです.

レベル4: 自作カラースキームを使用

ここまできたら,実際に作ってみようと思われた方もいらっしゃるかと思います. しかし,実際に作るとなると,色々大変なことが多いです.

thincaさんの記事cocoponさんのIcebergを作成した際の記事が自作する際に読んでおきたい記事です!

私はデザイナではないので,デザインに関することは言えないのですが,その代わり作成する際に非常に役に立ったおすすめサイト・ツールなどを紹介したいと思います. 

手順

下記は,いろんな人のカラースキームを拝見した際に行なっていると思われる手順です.

create_my_own.png

オンライン編集ツール

Vivifyというこちらの編集ツールが非常に役に立ちます.

テストコード

Rosetta Code Dataのこちらのレポジトリには数多くの言語で書かれたコードがあります.

.vimrcに記述

~/.vim/colorsもしくは~/.config/nvim/colors内にファイルを置くと,.vimrcで設定することができます. 書き方は上記のデフォルトや公開されたカラースキームと同様です.

レベル5: 自作カラースキームを公開し使用する方法

あまり,レベル4と差異はないのですが,公開するというところが重要だと思い別のレベルにしました.

Githubに公開する方法は非常に単純で,ディレクトリ構造などを間違えなければすぐできます.

image.png

パッケージ等で読み込むのは./colors内のトップのファイルのみなので,そこだけ注意が必要そうですね.

最後に

本当に広く浅くで紹介しました. もし間違っている箇所などございましたら,コメントよろしくお願いいたします.

参照サイト

How to set and use a vim color scheme: https://alvinalexander.com/linux/vi-vim-editor-color-scheme-colorscheme molokaiのカラースキーム: https://github.com/tomasr/molokai Vim のカラースキームが微妙に気に食わないときの対処法: http://cohama.hateblo.jp/entry/2013/08/11/020849


  1. terminalによっては,ANSIIのパレットの色によって少し異なる色が出力される可能性があります. :XtermColorTableなどでxterm256の色合いを調べつつ,もっとも求めているものに近い色を探してください.

Women Techmakers Scholarshipについて

f:id:sff8:20190121101505p:plain

こんにちは、今回はGoogleが主催するWomen Techmakersの奨学金プログラムについて紹介したいと思います!

様々な方がこの体験をブログに綴っているため、他の方のも参考にするといいと思います! 私はどちらかというと、エントリーをするためのエッセイなどに焦点を置いて、経験談をもとに綴ろうと思います!

f:id:sff8:20190112162135j:plain

Women Techmakersとは

Women Techmakersとは、

From 2014 to present, Women Techmakers is continually launching global scalable initiatives and piloting new programs to support and empower women in the industry.

と、ホームページには書かれているのですが、ざっくりいうと、Google主催のテック系で働く女性をサポートするコミュニティみたいな感じです!
多分、この記事を読んでいる方々はテック系を学んでいる女子学生が多いので、こう言ったコミュニティの必要性はすごくわかると思います.

そして、今回紹介しますWomen Techmakers Scholarshipのページは以下になります: www.womentechmakers.com

応募資格

応募資格はざっくり6つほどあります.

To be eligible to apply, applicants must:

  • Identify as female
  • Currently be enrolled at an accredited university for the 2018-2019 academic year
  • All students graduating in 2019 and beyond are eligible to apply
  • Be studying computer science, computer engineering, or a closely related technical field
  • Demonstrate a strong academic record
  • Exemplify leadership and demonstrate passion for increasing the involvement of women in computer science

とまぁ、かなり大雑把な感じがしますよね。

これを翻訳しますと、下記のようなものになります:

下記の要項を満たしたものに応募資格を与える:

  • 女性であること
  • 2018-2019年現在、認定された大学に所属していること
  • 2019年度以降に卒業を控えている全ての学生
  • 情報科学情報工学、またそれらに密接した科学的分野を学んでいる方
  • 優れた成績を残していること
  • リーダーシップを取り、コンピュータサイエンス系の女性の躍進の推進活動を行なっている

1〜3つ目は女子かつ大学生以上の学生であれば満たされます。

4つ目については「どういうこと?」と感じるかもしれませんが、情報系でなくても参加ができるよ、という趣旨です。実際、参加した方の中には物理系や機械系などと言った方々も参加していました!

そして、5つ目や6つ目あたりが応募を決めるネックになるところかと思います。
まず、優れた成績ってどのレベル?と思われるかもしれせんが、個人的にはとりあえず応募してみることをお勧めします!
大学によって成績のつけ方が違うので

そして、最後の要項については、結構難しいかと思います。でも、大学の課題やチーム課題、インターンなどを通して語れることが1つでもある方は是非、臆せず応募してみてください!

実際、上記の応募要項の5つ目や6つ目に自信がなくても是非、応募はしてみた方がいいです!

応募書類

応募に必要なものは以下になります:

応募に必要な書類:

  • 基本情報
  • 履歴書
  • 現在と過去の成績表(既に学位を取っていれば)
  • 3つの質問に対するショートエッセイ

基本情報

Googleフォームを用いて基本情報を入力します。

履歴書

次に必要なのが、履歴書です。
履歴書では自分の経歴・技術力・表彰されたものや活動などを記しましょう。
Googleはたくさんの履歴書の中から光るものを取り出すので、出来るだけ見やすく、そして自信を持って書いた方がいいです。(もちろん嘘はダメですが...)

履歴書は英語で記入します。私は、myperfectresumeというサイトで作成しました。

www.myperfectresume.com

成績表

成績表は英語でpdf形式で提出をします。 大学によってはオンラインで取得できなかったり、取り寄せるのに時間がかかったりするようなので、出来るだけ早く取り掛かった方が良さそうです。

エッセイ

そして応募で最も大事なのが、こちらのエッセイです。もちろん、英語です!
しかし、英語だからといって諦めないでください!実際、結構のかたがこのエッセイで諦めているのではないかと思います。

これらの質問は、応募者の情報系に対する情熱や苦労、そして女性の躍進に対する思いリーダーシップ力などを問いてきます。(少なくとも今年度はそうでした)
応募者は皆色々やってきている方々が多いと思います。しかし、自分に自信を持ってエッセイを書くのがポイントです!「こんなことしかやっていない」、と思っていたことも実は他の人がやっていないことかもしれないので、絶対に自分を過小評価しないでください!
もちろん、誇張しすぎたり、嘘を書いたりするのはダメですが。

エッセイについて

実際にどのようなことを書いたか、次回以降の方の助けとなるように要点を記していきます。
同じ問いが問われるとは思わないので、参考程度に受け止めてください。

1. How do you think computer science, computer engineering and/or a closely related technical field is changing the world? How do you plan to contribute?

よく見る、または議論される問いだと思います。そして、3問の中で最も答えやすい問いなのではないでしょうか。

  • コンピュータがどのようなインパクトを社会に施しているのか(昔と比べたり)
  • 今までどのような研究・開発をしてきたか. なぜそういった活動をしようと考えたのか
  • 将来どのような研究・開発がしたいか. そしてそれがどのような影響をもたらすのか

この問いはどちらかというと、あなたがどういった活動をしてきたのか、そしてどういった活動をして社会に貢献したいのかが焦点になっていると思います。なので、大学の課題でもいいのでどのようなことをしてきたのかを熱意持って語れるといいと思います。

2. Please discuss the structural issues impacting underrepresented groups that you have observed or experienced in computer science, computer engineering, and/or a closely related technical field. What connection and/or effect do you think these have to the industry and/or the wider world?

ここでの underrepresented groups とは「女性」としてコンピュータサイエンスの業界、また似た分野で感じていることを綴ればいいと思います.
そして, 以下のことを書くといいと思います.

  • 女性として受けた差別・感じる格差などそれぞれあると思います. 実体験や友人の体験でもいいので紹介する.
  • それがどのように今後, 女性がこの業界で活躍しようとした時に影響を与えるか. また, 単純に他の女性がマイノリティの業界に与えるインパクトがあるのか.
  • 実体験をもとにかければ, 尚読み手に印象が残ると思います
3. Please write about an activity that you are currently or recently involved in to address structural issues for underrepresented groups in your field.

Googleでは、リーダーシップが取れる人材を探しています。 そして、女性がもっと活躍できるように活動をしている方々を応援しています。
なので、この問いでは、今まで活動してきた大学の団体において、自分が如何に貢献をしてきたかを紹介しました。

  • 自分の貢献度を記す
    • 団体内での役割
    • 得られた結果(あまり良くなくても、やったということが大事です)
  • どのように「女性の躍進」を助けることができたのか

実際、この問いに一番時間をかけた気がします。今まで、自分はこんなにすごい!ということをエッセイなどで記述することがなかったので、非常にやりづらかったです.
しかし、のちに知人に読んでもらった際に、「自分に自信を持ってもっと自慢してもいいと思う」と言われてしまいました... しかし、そのおかげで通過ができたと思います。 皆さんも、自分の活動を過小評価せずに、自信を持って綴ってください!

2次選考

案内

提出後、3週間くらいで2次への案内がメールで届きました。
hangoutで30分ほどの面接をするとの趣旨でした。 ちょうどその時期にアメリカにおり、時差の問題、しかもairbnbに泊まっていたため、 wifiの問題がありました。ただでさえ緊張をしていたのに、余計にうまくいかなかったらどうしようとさらに緊張をしたのを覚えています。

雑談ですが、宿泊していたairbnbwifiのスピード(https://fast.com/で測った結果です)が最大8.3Mbsしか出なかったので、途中で音声が途切れたりなどしていまた。
皆さんも、万が一に備えて事前にwifi環境はチェックしておいたほうがいいと思います...

ビデオ電話面談

ここでは事前に提出したエッセイに関する質問や、テック系に関して応募者がどのような考えを持っているのか聞いてきます。
英語で答える質問もあるのですが、緊張せずにゆっくり答えれば大丈夫です!

内容などは同期の方が(下に載せてあります)書かれているので、省きます!

格通

全ての面接が終わって、1・2週間くらい経つと合格通知がメールできます。 そのメールの1ヶ月後くらいにリトリートプログラムという名で海外(もしくは日本)のGoogleオフィスに行けるので、応募する際はその辺の日程にも気をつけた方がいいかもです。

最後に

自分はエントリーをする際、あまり期待しないで出しました。しかし、自己アピールができていたのがよかったのかな、という風に今は思います。実際、提出する前に他の人に読んでもらうことが一番なのではないかと思います!

以下に他の方が体験を綴ってくれているているので、是非一度読んでみてください! 詳しいプログラムの内容などを書いてくれているので、とても参考になると思います!

他のブログ

日本人

私も、応募をしようとしていた時に過去の先輩方のブログなどを拝見し、より一層いきたいという気持ちが強まりました。
他の方はもっとこのプログラムでどのような活動をするのか紹介しているので、是非読んでみてください!

boiled-egg.hatenablog.jp

proton-yoko.hatenablog.com

lila-lila.hatenablog.com

同期の他の国の方々

少し観点が違うかもしれませんが、似たような体験をもと書いていたりするので、事前に読むとWomen Techmakersのこの奨学生プルグラムの全体像がわかるかもしれません!
また、私よりも丁寧にエッセイのポイントを記してくださったりもしているので、エッセイで困っていたら、是非お勧めします! 全部英語の記事です!

medium.com

medium.com

medium.com

Pytorchの疎行列演算まとめ

疎行列とはほとんどがゼロ要素で埋められているような行列のことを指します.  グラフ構造を扱う際に隣接行列やAffinity Matrixが疎な行列となることが多いです. このような行列はすべての要素を保存するのではなく, 非ゼロ要素の座標と値のみを保存する方がメモリ効率がよくなります.

疎行列の保存形式もいくつかあるのですが, PytorchではCOOフォーマットのみをサポートしています. 疎行列のフォーマット(COO, LIL, CSR, CSC)について気になる方は, はむかずさんのscipy.sparseでの疎ベクトルの扱いがとてもわかりやすいです.

Pytorchにおいても疎行列の演算がサポートされていますが, 前述したようにCOOフォーマットのみのサポートであり実装されている演算が限られているなどの制約はありますが, GCNなどのグラフ構造を用いた深層学習の研究が一般化するに連れて今後も開発が進んでいくと考えています.

This API is currently experimental and may change in the near future. とあるようにまだ実験段階の機能なので, As-Isでの機能を紹介する形となりますが, 疎行列のAPIの実装に関してはv1.0.0で大幅に改善されていることもあり, Pytorchのバージョンはv1.0.0を利用して検証を行いました. 疎行列の演算に関する公式ドキュメントがほとんどない状態なので少しでも理解の助けになれば嬉しいです.

疎行列の初期化方法

一般的なCOO形式の疎行列の初期化方法と同じく, インデックスの座標と値をペアになるように渡すことで初期化ができます.

>>> i = torch.LongTensor([[0, 1, 1],
                          [2, 0, 2]])
>>> v = torch.FloatTensor([3, 4, 5])
>>> sm = torch.sparse.FloatTensor(i, v, torch.Size([2,3])).to_dense()
 0  0  3
 4  0  5
[torch.FloatTensor of size 2x3]

最近になって密行列を疎行列に変換するメソッドが実装されました. 下記のように密行列をto_sparse() メソッドで疎行列に変換できます.

>>> sm = torch.randn(2, 3).to_sparse()
tensor(indices=tensor([[0, 0, 0, 1, 1, 1],
                       [0, 1, 2, 0, 1, 2]]),
       values=tensor([ 1.5901,  0.0183, -0.6146,  1.8061, -0.0112,  0.6302]),
       size=(2, 3), nnz=6, layout=torch.sparse_coo, requires_grad=True)

また, 疎行列の諸情報を取得したい場合は以下のメソッドが利用できます.

インデックスの取得

>>> sm._indices()
tensor([[ 0,  1,  1],
        [ 2,  0,  2]])

値の取得

>>> sm._values()
tensor([ 3.,  4.,  5.])

非ゼロ要素数の取得

>>> sm._nnz()
3

転置行列の取得

>>> sm.t()
torch.sparse.FloatTensor of size (3,2) with indices:
tensor([[ 2,  0,  2],
        [ 0,  1,  1]])
and values:
tensor([ 3.,  4.,  5.])

疎行列の演算

Pytorchでは基本的な疎行列の演算が実装されています.


torch.sparse.mm(mat1, mat2) → Tensor

引数が mat1 はsparse.Tensorで, mat2Tensorである必要があるということに注意してください.

疎行列と密行列の行列積の計算はv1.0.0以前からtorch.spmm(mat1, mat2)を用いることで計算可能でしたが, 疎行列の勾配を求めることができませんでした.

例えば下記のコードはエラーになります.

>>> a = torch.sparse.FloatTensor(i, v, torch.Size([2,3])).requires_grad_(True)
>>> b = torch.rand(3, 2, requires_grad=True)
>>> c = torch.spmm(a, b)
>>> y = c.sum()
>>> y.backward()
RuntimeError: calculating the gradient of a sparse Tensor argument to mm is not supported.

これに対して, torch.sparse.mm(mat1, mat2)メソッドを使うことによって, 疎行列に対しても誤差逆伝搬を適用することができるようになっています.

>>> c = torch.sparse.mm(a, b)
>>> y = c.sum()
>>> y.backward()
>>> a.grad
tensor(indices=tensor([[0, 1, 1],
                       [2, 0, 2]]),
       values=tensor([1., 1., 1.]),
       size=(2, 3), nnz=3, layout=torch.sparse_coo)

torch.sparse.addmm(mat, mat1, mat2, alpha=1, beta=1) → Tensor

下式のように和と行列積を同時に計算します. 引数が mat, mat2Tensorで, mat2がsparse.Tensorである必要があるということに注意してください.

$\text { out } = \beta \text { mat } + \alpha \left( \operatorname { mat } 1 _ { i } @ \operatorname { mat } 2 _ { i } \right)$

>>> a = torch.sparse.FloatTensor(i, v, torch.Size([2,3])).requires_grad_(True)
>>> b = torch.randn(3, 2, requires_grad=True)
>>> c = torch.randn(2, 2, requires_grad=True)
>>> d = torch.sparse.addmm(c, a, b)
>>> d.grad_fn
<SparseAddmmBackward object at 0x110000000>
>>> y = d.sum()
>>> y.backward()
>>> a.grad
tensor(indices=tensor([[0, 1, 1],
                       [2, 0, 2]]),
       values=tensor([2.6244, 1.9874, 2.6244]),
       size=(2, 3), nnz=3, layout=torch.sparse_coo)

torch.sparse.sum(input, dim=None, dtype=None) → Tensor

疎行列の要素の和を計算します. このメソッドに関しても疎行列に関しての誤差逆伝搬が可能になっています.

>>> a = torch.sparse.FloatTensor(i, v, torch.Size([2,3])).requires_grad_(True)
>>> y = torch.sparse.sum(a)
>>> y.grad_fn
<SumBackward0 object at 0x1016c7208>
>>> y.backward()
>>> a.grad
tensor(indices=tensor([[0, 1, 1],
                       [2, 0, 2]]),
       values=tensor([1., 1., 1.]),
       size=(2, 3), nnz=3, layout=torch.sparse_coo)

まとめ

公式ドキュメントの焼き直しのようになってしまいましたが, Pytorchでの疎行列の演算の方法を簡単にまとめてみました. 追記の必要, 間違い等あれば気軽にコメントください.

From Shun

KubernetesにおけるLoadBalancerとIngressの違いについて

Kubernetesでは, インターネットからクラスタ内部のPodにアクセスするためにServiceやIngressを通して内部のPodにアクセスできるように必要があります.

このとき一般的な公開方法としてLoad Balancer Serviceを使う方法とIngressを用いる方法がありますが, (NodePortやClusterIPで公開する方法は, 用途が限られるので割愛します) 本記事ではそれぞれの機能と使い分けについて簡単に解説しようと思います.

続きを読む