Open GENZITSU opened 2 years ago
Namekoというマイクロサービス構築用のpythonフレームワークの紹介記事
AMQPに則ったRPCメッセージングとpub-sub通信が可能で並行性やスケーラビリティ、fault toleranceも考慮されたデザインになっているとのこと
パフォーマンス要件がシビアなケースだとあまり使用することはなさそうだが、さくっと作りたい時は心強そうである。
以下のようなところが印象的であった。
ステレオカメラ / 左右のデジタルカメラの情報を総合的に判断に用いる
さらに、物体の速度を計算する手法はハードな研究テーマではあるが一般的にあまり大きく進化しておらず、カルマンフィルターなど一昔前のアルゴリズムがいまでも主流で使われている状態だったという。そこで齋藤氏らが独自に計算式を編み出し、速度を計算している。
AI処理の大半を占めるBackbone(特徴抽出)を共有したマルチタスクネットワーク『SUBARU ASURA Net』を開発することで対応
Q.ラベリングは自動・手動どちらで行っているのか 大久保:どちらの手法も取り入れています。 齋藤:手動に関しては、コストが安価なオフショアを効果的に活用しています。外注というよりは、パートナーといった位置付けで協業しています
様々な処理に共通したbackboneを作るというのはある種必然かもしれない。
適切な広告表示を行うために、クエリと掲載商品の関連度(適合性)を推定する機械学習モデルを構築した事例が綴られている。
適合性判定用のアノテーションデータを作成するのは厳しいのでユーザーのアクションデータを使用。
一般にクエリ意図と適合する商品の方が、適合しない商品よりも、ユーザーアクションは起こりやすいという相関関係があると考えられます。そこで今回は、ユーザーアクションがあった商品は適合している/ユーザーアクションがなかった商品は適合していない、と見なして分類するモデルを組むことにしました。
ユーザーのアクションを推定したいのではなく、適合性を推定したいので、使用特徴量を制限した。
闇雲に商品自体の特徴量を使うと、過度にユーザーアクション予測に最適化されたモデルが学習されます。つまり『クエリと全く合致しないけど、販売実績が良いから適合している商品』と判定するおかしなモデルになってしまう
使える特徴量を全て学習に使用するのではなく、適度に制約を与えることが必要になってきます。今回は商品自体の特徴量はデータから省き、単語一致率のようなクエリと商品の適合性を直接示す特徴量のみを採用しました。
最終的にはクラウドソーシングベースの比較を行っている。
Yahoo!クラウドソーシングを利用して評価を委託しました。 今回は、さまざまな設定で学習したモデルをデプロイした時の検索結果をワーカーに示し、どちらがよりクエリに適した結果を出せているかを、クエリごとに判定してもらいました。
割と今更感あるテーマな気もするけど、今まで実装されていなかったんだろうか....?
streamlitでアプリケーションを作る際に便利なアドオンが5つ紹介されている。(いずれもpipで入れられる)
以下の画像のように入力文字列をUIからダイレクトに取得できる
以下のようにDataFrameをインタラクティブに操作できるようになる
画像をうまく貼れないので、リンク先で確認。
なんか綺麗な図を表示できるようになる。
文字通り、streamlitでpandas-profilingの結果を表示できるようになる
streamlit上でNER ラベリングができるようになる。
メモ
機械学習プロジェクトの一連のプロセスにおいて、どのような罠が潜んでいるかが丁寧にまとめられている資料。チェックリスト的に使っていきたい。
素晴らしい資料。
NTT Communicationsで内制開発されたNode-AIがどのような課題から生み出されたか、どのような機能を持っているか、その開発体制などが綴られている記事。
課題感の部分共感した
現場担当者や意思決定者が仕組みを深く理解していることが重要になるが、伝えるのが難しい
【壁その1:ステークホルダーの分析内容の相互理解】 課題解決にはステークホルダーとのすり合わせ、特に分析中は精度を上げたり導入判断を行うためのフィードバックが重要になります。この時、データ分析者とステークホルダーは分析内容をしっかり把握することで、より深いフィードバックが可能になります。 一方で、データ分析者の分析の多くはPythonやRなどのプログラミング言語でなされており、専門外であることも多いステークホルダーにとってはその分析自体がブラックボックスとして捉えられてしまいます。この状態では上記で挙げたような精度を上げるための深いフィードバックや、もっと手前の課題設定が正当性の把握などが遅れてしまい、精度が上がるのに時間がかかったり、導入に至らず課題設定からやり直したりするようなことが起きてしまいます。
クライアントへの報告資料作りなどは結構重たいものの、短期間でFBをもらって改善していくサイクルを取る方が効率的
【壁その2:コミュニケーションの重さ】 本来は分析に利用したい稼働の大半を報告書作りに割いてしまうこととなります。 さらに打ち合わせの中では月一参加の意思決定者から課題設定が正当でないことを指摘されてしまったり、現場の運用者から新しい知見が与えられて前処理を追加しなければならない、といったことが起きます。 このようにコミュニケーションの重さからフィードバックの間隔が空いてしまうことにより、最終的な課題解決のための右往左往が増えてしまうことになります。
モデルの信頼性担保や、納品が難しかったりもする
【壁その3:導入の判断と導入自体の難しさ】 導入には意思決定者のGoサインが必要になります。これを判断する際問題になるのが「モデルの信頼性」です。 一方、昨今利用される非線形性を含む複雑なモデルではそのような予測の判断根拠を抽出するのは難しく、さらに抽出したとしても説明自体を解釈するにはより専門的な知識が必要であると言う問題があります このモデルの導入や運用を行う工場のシステム担当者にとっては、作成されたモデルを扱うにはPythonといった言語や機械学習ライブラリ、Webアプリケーションの知識が必要であり、かなりハードルが高いものとなります。したがって、技術的な観点でも現場にモデルを導入していくことは課題があります。
こういう課題感もあり、以下のような機能を作っている
技術スタックや開発体制
参考になる。
表題の通り。
パナソニックやヤンマーに在籍する著者から日本ロボット工学学会に提出されたもの。
メモ
結構な分量のゴミにまつわるデータが収集されている。
ただし、各データセットが使えるかはそれぞれLICENSEを確認する必要がある。
一例
メモ
本番環境でのモニタリングが必要な理由をケーススタディから論じている記事。
ケーススタディでは顧客の購買予測を行うモデルが本番環境にデプロイしたところ、特徴量として使用していたログイン回数の値がなぜか0になっていたという事象が発生し、予測性能が著しく落ちたことが1ヶ月後になってようやく分かったという例が述べられている。
この原因として以下が挙げられている。
他チームの行った変更に対応できていない 一般的に、機械学習に必要なデータの集計処理はシステムの幅広い範疇に依存し、本番サービスとは独立したサービスになりやすく、本番サービスでの変更に追随できないことも起こりえます。このため、それぞれのシステムの依存関係の管理と、システム変更時の連絡体制の構築が必要になります。
データの欠損について気がつけていない データの型として int を用いていた場合、これは妥当な値です。NULL が出現しないかだけではなく、欠損として扱われるデータの件数や割合を監視することも重要です。 欠損以外にもデータの統計量や分布を把握し、監視する必要があります。
モデルの異常に気がつくのが遅れた 入力データの監視を行っていればユーザーにキャンペーンを行う前に問題についてわかったはずです。キャンペーンの実行にコストがかかるケースにおいて、キャンペーンの実行前に異常がわかることは非常に大事です。
適用範囲を急拡大し問題が大きくなった いきなり全ユーザーを対象とするのではなく、A/B テストを行う、カナリアリリースを行うといった方法で、影響範囲を小さくできないか検討すべきです。
購買予測系だと結果の評価が月1になってしまいどうしても発見が遅くなってしまう、また推論結果をもとにしたモニタリングはどうしても遅行指標になってしまうので、先行指標である入力情報を用いるべきということかなと。
MLOpsの各構成で使用できる、awsの便利なサービスが紹介されているスライド from aws japanの人 @ MLOps勉強会
AWSが用意しているMLOps周りのサービスはかなり多い。SageMaker周りのサービスが多いが、気になったものだけ抽出。
メモ
big-sleepというOSSを用いることで、テキストから画像を生成する方法を紹介している。
# from http://aiweeklynews.com/archives/56310771.html
from big_sleep import Imagine
dream = Imagine(
text = "cat and dog in the sky",
lr = 0.1,
epochs = 5,
iterations = 150,
save_progress = True
)
dream()
メモ
白黒画像を着色するOSSライブラリの使用方法を紹介する。
実行結果はこんな感じ
colorizer = get_image_colorizer(artistic=False)
image_path = colorizer.plot_transformed_image_from_url(url=source_url, render_factor=35, compare=True, watermarked=False)
メモ
{github](https://github.com/jantic/DeOldify)
深層学習以前のノイズ除去手法BM3Dから、DNNベースのDnCNN, Deep Image Prior, Noise2Noise, Noise2Voidなどををまとめている記事。
BM3Dは、画像の非局所領域に対して類似度の高い領域を集めて3次元のブロックを作り、そのブロックに対する直交変換および係数に対するシュリンケージによってノイズを除去します(図1)。これは、自然画像中には類似度の高い領域が複数存在する(自己相似性が高い)というPriorに基づいた手法であるといえます。
DnCNNはノイズを含んだ画像とノイズのないクリーン画像ペアによる教師あり学習で訓練し、BM3Dを超える性能を発揮しました 綺麗な画像を出力するよう学習させるのではなく、画像に含まれるノイズを出力するよう学習させるという工夫によって性能を向上させています DnCNNは特定のノイズレベルのガウシアンノイズに対してだけではなく、ノイズレベルが未知(ブラインドノイズ)の画像に対しても良好な性能を示しました。また、ガウシアンノイズ除去だけでなく、JPEGノイズ除去や超解像といったタスクにも同じ学習方法を用いて当時の最先端の性能を発揮することが示されました。さらに、これら三つのタスクを一つのモデルで学習したとしてもなお最先端の性能を示すなど、ノイズ除去だけにとどまらない汎用的な画像復元手法となっています。
CNNそのものが画像に対するPriorだという主張のもと、ノイズを含む画像一枚のみを用いて学習しノイズ除去を実現するDeep Image Priorとよばれる手法を提案 具体的には、乱数によって生成された画像一枚を入力とし、ノイズを含む画像を教師画像として学習を行います。 CNNがノイズよりも滑らかな成分を学習しやすいことを利用しており、「ノイズ除去後の画像は滑らかである」というPriorに基づいた手法であるとみなせば、CNNは式(2)における正則化項の役割を果たしているといえます。
Noise2Noiseロスの最小化によって訓練されたネットワークは、元画像として想定されうる画像セットからなる分布の期待値を復元画像として出力する、という洞察に基づいたものです。 この手法は、ノイズ画像-クリーン画像のペアでの学習と比較して同等かそれを上回る復元性能を発揮しました。 Noise2Noiseのアイデアは、同一シーンを写した独立したノイズを含む二枚以上の劣化画像があるとき、学習の際にクリーン画像が不要となるということを示しています。
著者らは、一例として、長時間露光によって撮影されたノイズのない写真の各画素値は、短時間露光で撮影された独立したノイズを含んだ画像セットの各画素の期待値である、と述べています。短時間露光画像と長時間露光画像のペアを用意するよりも、短時間露光画像を複数枚用意する方が遥かに簡単であるため、本手法は実際のノイズ除去のシチュエーションにおいて実用的なアイデアだといえます。
Noise2Voidは、ノイズを含む画像一枚からノイズ除去を学習する自己教師あり学習手法として提案されました。 Noise2Voidは、入力画像と教師画像に同一の劣化画像を用います。 具体的には、学習のために切り出されたパッチの中央の画素をマスクし、その周囲の画素値からマスクされた画素値を推定するといったアイデアが提案されています。 Noise2Voidは、各画素が隣接画素と高い相関を持つことと、ノイズが各画素に対して独立に発生しているというPriorを考慮したモデルであるとみなせます。
大量のデータセットを用いて画像の性質を学習するよりもむしろ、Priorを適切に設定して少数または一枚の劣化画像から復元を行う復元モデルベースのアプローチに回帰しているように感じます。
勉強になる
ということらしい
torchvisionのバックエンドは、デフォルトでPillowであり、Pillow-SIMDがインストールされているとデフォルトが変更されます。accimageはset_image_backend関数でバックエンドに設定できます。 ちなみに、デフォルトのPillowは最近のCPUだったらPillow-SIMDに乗り換えたほうがいいかもしれません。
なんかかなり違うらしい
- 通常のPillowの4-6倍程度速いらしいです。
- AVX2が有効なCPUであると、ImageMagickより16-40倍速いらしいです。
メモ
機械学習開発におけるData Centric Approachの解説記事 from neptune.ai
以下の図が特に良い
新しい内容はそこまでないが、メモ
vision transformerの画像注意機構を効率化するために、attention計算に用いるピクセルを適応的に変化させることができるようなDeformable Attentionを組み込んだモデルの紹介。
ざっくりとした概要スライドの抜粋
deformable conv自体知らなかったので勉強になった。
Data Leakage in Machine Learning: How it can be detected and minimize the risk
リークがおきる典型例の紹介から、どのようにリークを検出し、リーク発生のリスクを低減させるかがまとめられている記事。
リークとは、モデルをデプロイする際には参照できない情報をもとにモデルの訓練をしてしまうこと。
リークの典型例
リークの大別
学習データへの混入 学習データに本来使ってはいけない未来の情報などが入っているケース
特徴量への混入 リークに該当する特徴量を駆除したつもりが、別の代理変数があったりするケース
このようなリークは第三者提供のデータにも混入しうるので常に注意する必要がある
リークの検出方法
リークのリスクを低減させる方法
コメント
大体テーブルデータ用な感じはするが良いまとめ記事
出典
元記事