618ZXW

アルゴリズムエンジニアと開発者の違いは何ですか?

データホエール

Datawhaleのヒント

編集:Visual Learning for Beginners、出典:Zhihu

質問の出典: https://www.zhihu.com/questio...

01

著者:Ru Xue

業界外の人は、開発者はレンガを運ぶ建設作業員、アルゴリズム開発者は他人にやり方を指示する建築家のようなものだと想像するかもしれません。しかし、この認識は完全に誤りです。今日のインターネット企業では、アルゴリズム開発者と開発開発者の役割は、組立ライン上の異なるポジションに位置するだけで、本質的には機械の歯車のようなものです。さらに、多くのアルゴリズム開発者の作業負荷は、開発者の作業負荷に匹敵するほどになりつつあり、「パッケージ交換」だけではもはや十分ではありません。

まず、開発とアルゴリズムの役割における責任の違いについてお話ししましょう。典型的なレコメンデーション/広告システムを例に挙げると、データベース -> リコール -> 大まかなランキング -> 細かいランキング -> 混合ランキング -> フロントエンドといった上流モジュールと下流モジュールが存在します。

  • 開発者の役割には、特定の要件に基づいたオンラインモジュールの構築と保守、そしてオンラインロジックを実装するためのコードの作成が含まれます。本質的には、開発者は純粋な「エンジニア」のような存在であり、ニーズに応じて機能を開発、テスト、そしてコードをデプロイします。例えば、リコールモジュールのコードロジックを修正して、ビジネス機能をオンライン化するといったことが挙げられます。各タスクには明確な目標があり、作業負荷は容易に測定できるため、作業内容は予測しやすく、成果も比較的確実です。しかし、要件が多い場合、開発者はそれらに対応するために残業する傾向があり、必然的に作業量が増加し、結果としてより優れた成果が得られます。そのため、開発者の役割は肉体的に厳しいものとなることがよくあります。
  • アルゴリズムエンジニアの主な目標は、クリックスルー率、コンバージョン率、レコメンデーションシステムにおけるユーザー滞在時間など、様々な手段を通じて関連指標を改善することです。上記の例で言えば、戦略/モデル構造の最適化(リコール、粗粒度ランキング、細粒度ランキングなど)、モデルトレーニングデータの最適化、そして新しいビジネスイニシアチブとの統合によるビジネス指標の最適化などが含まれます。アルゴリズムが限界に近づいている今、このプロセスは非常に困難になっています。それぞれの最適化は必ずしも効果的ではない可能性があり(ほとんどは効果がありません)、新しいソリューションの提案、最適化、指標の調査、そしてまた新しいソリューションの提案という繰り返しの作業を繰り返し、突破口を見つける必要があります。数行のコード変更でメリットが得られる場合もあれば、膨大な作業を行っても成果が得られない場合もあります。そのため、この分野の作業量と目標を定量化することは難しく、アルゴリズムエンジニアは「精神的に疲弊する」仕事と言えるでしょう。

スキル面では、アルゴリズムエンジニアはアルゴリズム分野における多くの知識を理解する必要がありますが、求められるエンジニアリングスキルは徐々に開発職に匹敵するものになってきています。

  • アルゴリズム担当には、様々な機械学習/ディープラーニングアルゴリズム、戦略、そして最先端のアルゴリズム/モデルへの精通が求められます。加えて、アルゴリズムに求められるエンジニアリング能力はますます高度化しており、基本的なアーキテクチャ知識(前述の社内向けレコメンデーション/広告アルゴリズムの各モジュールのコードなど)、基本的なアーキテクチャ開発スキル(C++、Javaなど)、データ開発の専門知識(Spark、Flinkなど)が求められます。その主な理由は2つあります。1つ目は、単純なモデル最適化では大きなメリットが得られなくなったことです。新たに開発されるアルゴリズムはますます複雑化しており、モデルをより効果的にするには、モデル設計、メトリクス分析、そして新たなソリューション提案において、アーキテクチャを深く理解することが不可欠です。2つ目は、迅速なイテレーションを実現するためです。開発者が完了すべき要件が多すぎる場合、アルゴリズムエンジニアは他の人がコードを開発するのを待つだけでは不十分です。円滑な作業進行を確保するために、単純な開発の一部を自ら担当する必要があります。
  • 開発者は、アルゴリズムエンジニアよりもアーキテクチャ、開発の基礎、その他の知識についてより深い理解が必要です。最も重要な技術的側面は、開発における具体的な役割によって異なります。

最後に、この2つのポジションの面接状況についてお話しします。一般的に、アルゴリズム関連のポジションは若干のバブル状態にあり、競争も激しい一方、開発関連のポジションにはより多くの求人があります。

  • 近年のAIの爆発的な人気により、様々な専攻が「アルゴリズム」へとシフトし、当時様々なアルゴリズムの専門分野をめぐって熾烈な競争を繰り広げていた学生が、現在では大量に卒業しています。そのため、アルゴリズム関連の就職面接は、特にCVやNLPといった実社会での応用が限定的な研究志向のアルゴリズム職種において、ますます競争が激しくなっているのは明らかです。現在、レコメンデーション/広告アルゴリズムは、専用プラットフォームが不足しているため、これらの分野に特化した大学が少ないことが主な理由で、それほど競争が激しくありません。面接では、過去のアルゴリズムプロジェクト経験、アルゴリズム自体の理解、アルゴ​​リズムの基礎知識、そしてコーディングの実践経験が主に重視されます。
  • 開発職には、バックエンドやフロントエンドなど、様々な種類があり、事業内容に応じて異なる技術スタックが使用される場合があります(例:C++を使用する企業もあれば、Goを使用する企業もあります)。開発職は需要が高く、どの企業も必要としており、相当数の人材が求められているため、アルゴリズム開発職ほど競争は激しくありません。面接も大体似たような内容で、主に過去のプロジェクト、開発の方向性に関連する基礎知識、そしてコーディングの課題に重点が置かれます。

将来の開発においては、個人の努力だけでは時代の潮流に追いつくことはできません。優れたビジネスチャンスと優れたリーダーは、ビジネスの成長を容易に促進し、個人の飛躍的な成長につながります。これは開発職種にも当てはまります。特定の開発職種やアルゴリズム職種を選ぶよりも、優れたプラットフォームと優れたチームを選ぶことが重要です。

上記の比較は、主にインターネット企業におけるレコメンデーション/広告アルゴリズム関連職と開発関連職に焦点を当てています。CVやNLPなど、より研究志向のアルゴリズム関連職もありますが、ここでは詳細は割愛します。

02

著者: AI Snail Car

私の個人的な要約や、他の開発者との会話など、さまざまな側面があります。

1. 給与と福利厚生

数年前には、アルゴリズム関連の職種の方が開発関連の職種よりも高い給与が支払われていたかもしれません。

近年は徐々にレベルが平等になってきましたが、同レベルではアルゴリズム開発が開発を上回っている企業もまだ多くあります。

さらに、Alibaba Star、Meituan Beidou、Kuaistar、Tencent Big Shot など、多くのタレントプログラムを参照することもできます。

大半はアルゴリズム関連の分野に配属され、中にはいわゆる「開発」分野に配属された人もいました。しかし、個人的には、それらはR&Dと呼ぶべきだと思います。なぜなら、これらの分野は分散ストレージなど、高度な並列処理やスケジューリングアルゴリズムを多く扱うからです。しかし、こうした分野は学生時代にはなかなか参入しにくい分野です(企業では現状、人材が不足しています)。

2. 職種

アルゴリズム関連の職種は、論文を読んだり、モデルを構築したり、論文を書いたりするなど、純粋に研究ベースの職種になることもあり、大学での学術研究に似た分野です。

この種の作業は開発作業とは大きく異なる可能性があります。

しかし、アルゴリズム「エンジニア」について話している場合、アルゴリズム エンジニアの理解は、実際にはアルゴリズム エンジニアリングを使用して問題を解決することだけです。

一般的に言えば、開発とは開発ロジックを使用して問題を解決することです。

本質的には、彼らは皆、問題解決を行うエンジニアです。ただし、アルゴリズムにはより多くのステップとより深い思考が必要になる場合があり、開発にも同じことが当てはまります。

次の回答をご覧ください:

https://www.zhihu.com/questio...

3. テクノロジースタック

個人的にはこの違いは重要だと感じています。

開発部門では、技術スタックは比較的幅広く、例えばバックエンド開発に長けていれば、多くのコア部門のポジションに応募できます。

しかし、アルゴリズムに関しては、焦点はかなり専門的です。例えば、良い内定を得たいのであれば、研究分野と仕事内容が合致していることが最大の前提条件です。合致していれば物事ははるかに容易になりますが、実際には非常に稀です。例えば、時空間シーケンスは気象学や交通など、様々な背景があり、細部にも違いがあります。同様に、ビデオ録画にも多くのサブフィールドがあり、レコメンデーションアルゴリズムはテキスト、ビデオストリーミングなどに分かれています。そのため、面接全体の範囲は(開発と比較して)比較的限られている可能性があります。

4. 職務要件

間違いなく開発は進んでいるが、アルゴリズムははるかに少なくなり、バブルはとっくに沈静化している。

それは理解できます。例えばアプリを作る場合、ソフトウェアであればまず開発システムを構築する必要がありますが、そのためには多くの開発者が必要です。一方、アルゴリズムは後からついてくるものかもしれません。

5. 難しさ

アルゴリズムは間違いなくより困難です。

あなたの周りにいる優秀な人材のほとんどはAI分野にいます。アルゴリズム関連の職に就く人は、一般的に周囲の人々から比較的優秀だとみなされています。もちろん、開発分野にも優秀な人材はたくさんいますが、ここでは「比較的」としか言えません。

さらに、清華大学や北京大学など、様々な業界から数学、経済・経営学、物理学を専攻した高学歴の人材が多数この分野に参入しています。彼らは正式なコンピュータサイエンスの教育を受けていないかもしれませんが、中には並外れた学習能力を持つ人もいます。さらに、AIの学習は、コンピュータの基礎知識を広範囲に必要とする開発とは異なり、ゼロから始める必要があります。英語と数学さえ堪能であれば、あとは個人の学習能力と理解力次第です。そのため、不利になるどころか、むしろ優秀な人材が多く、求人が過剰になっている状況です。

03

著者: アンバースキー

私の職種はアルゴリズムエンジニアですが、実際の仕事はアルゴリズムと開発がそれぞれ50%ずつです。友人とアルゴリズムや開発とは何かについて話し合うこともよくあります。

経験が 1 年未満の新人アルゴリズム開発者としての私の観点からすると、アルゴリズムの役割は数学的な関係を扱い、開発の役割は論理的な関係を扱います。

開発者の責任は、製品のロジックを最下層から最上層まで構築することです。これには、フロントエンドページ間のナビゲーションロジック、バックエンドとデータベース間のインタラクションロジック、フロントエンドとバックエンド間のインタラクションロジックが含まれます。例えば、製品がビデオプラットフォームである場合、開発者はインターフェースを開く、ビデオをクリックして再生ページに入る、アカウントを登録する、情報を変更するといったタスクを担当します。

アルゴリズム エンジニアの職務は、その名の通り、アルゴリズムを中心に展開します。アルゴリズムには、機械学習、データマイニング、NLP、コンピューター ビジョン、レコメンデーション システムなど、さまざまな形式があります。多くの場合、アルゴリズム エンジニアは製品の中核を担い、非常に具体的な側面を担当したり、主要な機能のサポートを提供したりします。動画プラットフォームのシナリオに戻ると、レコメンデーション ページが更新されるたびに新しい動画が表示されます。更新のたびにユーザーにどの動画を推奨するかを決定するのが、レコメンデーション アルゴリズムの仕事です。アルゴリズムは多くの反復処理を経て、多くのアルゴリズム エンジニアが最適化に頭を悩ませています。さらなる特徴量エンジニアリングが必要か? パラメータをさらに調整する必要があるか? より適切なモデルが必要か? などなど。これらの操作は主に数学的なものであり、データセットの分布、関連性マトリックス、モデルの損失関数などの考慮事項が含まれます。

もちろん、研究の方向性は他にもたくさんあり、私が挙げた例はほんの一部にすぎません。

まだ卒業したばかりなので、視野が狭い部分があります。もし不正確な点がありましたら、専門家の方々に優しくご指摘いただければ幸いです。

04

著者: kuadoh

現状では、収入面ではアルゴリズム系と開発系の職種に基本的に差はありません。(2017年頃、ディープラーニングが爆発的に成長したこともあり、当初はアルゴリズム系の職種の方が初任給が高かった時期もありました。)

以下では、アルゴリズムに重点を置いた役割の観点から私の理解を共有します。アルゴリズムの役割は、主に直接プログラミングでは解決できない問題(主に画像、音声、テキスト認識などの非構造化入力)に対処します。この種の入力を処理するためのif-elseルールを手動で記述すると、プログラムが煩雑で長くなり、すべてのケースをカバーできなくなる可能性があります。解決策としては、問題を数学的な問題に変換し、モデル化し、ラベル付きデータを用いて数学的な問題を解くことが挙げられます。そして、得られた数学モデル(関数y=f(x)は典型的には確率関数)を使用します。

開発チームは構造化された入力処理を担当し、処理すべきシナリオは比較的固定されています。顔認識インターフェースを例にとると、開発チームの責任範囲には、認識対象の画像を圧縮し、ネットワーク経由でサーバーに送信して解凍し、画像入力アルゴリズムモジュールによって得られた結果をネットワーク経由でクライアントに送信することが含まれます。短時間で大量の顔画像入力をサーバークラッシュなく処理し、クライアントに遅延が発生しないようにすることは、バックエンド開発者が解決しなければならない一般的な課題です。

他の回答者も述べているように、開発業務は肉体的に負担が大きいことが多く、アルゴリズム業務は精神的に疲弊します。開発業務は一般的に比較的明確な問題(入力をいかに速く処理しながら精度を維持するか)を扱うため、開発者はコード分析とデバッグを通じて問題を特定し、確かなコンピュータサイエンスの基礎知識やより多くのマシンを活用することで解決することができます。例えば、数十ペタバイトのデータがあり、上位100件を見つける必要があるもののメモリが不足している場合、ヒープソートで処理できます。あるいは、リソースに余裕があれば、多数のマシンを用いた分散処理によって迅速に問題を解決することも可能です。

05

著者:Guan Jianchun(Arvin)

まず、アルゴリズム関連の職種から見ていきましょう。アルゴリズムには通常、アルゴリズム設計とアルゴリズム実装という2つの役割が関わってきます。現在では多くのチームでこの2つの役割を兼任し、アルゴリズム設計者と実装担当者がそれぞれ後者を担当しています。しかし、アルゴリズム設計者が実装プロセスを担当せず、両者を分離しているチームもあります。業務の複雑さという点では、アルゴリズムエンジニアは比較的仕事量が多いものの、キャリアパスも非常に長いと言えます。

多くのアルゴリズム エンジニアは、最終的には企業で主任科学者や最高技術責任者などの役職に昇進するため、アルゴリズム エンジニアのキャリアの見通しは非常に有望であると言えます。

開発職についてお話ししましょう。実際、ソフトウェアチームにおけるほとんどのポジションは、フロントエンド開発、バックエンド開発、モバイル開発など、開発職です。ほとんどのプログラマーは開発業務を行っていると言っても過言ではありません。アルゴリズム開発職とは異なり、開発職は人数が多く、従業員に占める割合も高くなります。さらに、ほとんどの開発職のキャリアサイクルは比較的短く、開発者は通常、一定の年齢(例:35歳)に達すると他の職種に移行します。

プロジェクトマネージャーなどの管理職に就く人もいれば、建築家や業界コンサルタントになる人もいます。もちろん、開発者の中にはアルゴリズムエンジニアになる人もいます。

アルゴリズムエンジニアと開発者、どちらの方が将来性があるのでしょうか?実は、技術力があれば、どちらの職種も将来の可能性は無限大です。

優秀なプログラマーになるには、次の 2 つのことを適切に行うことが重要です。1 つ目は、職務に集中することです。2 つ目は、技術開発のトレンドに遅れずについていき、仕事の昇進と自己学習を通じて知識構造を継続的に向上させ、職場での競争力を高めることです。

*
トリプル「いいね!」をお願いします ↓ *