Наскоро бях на интервю за роля на изследователски инженер (визия) в LinkedIn. В тази роля от кандидата се очаква да работи върху най-съвременните алгоритми за компютърно зрение, за да разбере потребителите и съдържанието на платформата. В тази публикация ще обобщя въпросите и целия процес на интервюто.

Получаване на обаждане:

Получих обаждане от специалист по подбор на персонал на LinkedIn, който взе моя опит и моите предпочитания.

Кръг задачи:

Те дадоха списък с набори от данни от различни домейни като Songs DB, NLP, CV и ме помолиха да съставя отчет от него. Това беше въпрос с отворен край, при който трябваше първо да проуча данните и да формулирам задача и да дефинирам показатели за оценка, да осигуря базови линии и след това да обуча мрежа. Избрах набор от данни Caltech-101 и изпратих доклада си.

Предварителен кръг:

В този кръг те ми зададоха няколко въпроса относно структурите на данни и показателите за оценка на проблема с класификацията.

Първият въпрос беше да се приложи структура от данни, която има средна времева сложност O(1) за вмъкване на елемент, изтриване на елемент и произволно изтриване на елемент.

// "O(1)" time :
//    - void add(T val)
//    - void remove(T val)
//    - T removeRandomElement()

Този въпрос има няколко варианта, един с „дубликати“ и един „без дубликати“.

След това започнахме дискусия относно показателите за оценка за проблеми с класификацията. Какви са общите показатели за оценка на класификатор? Точност, прецизност, припомняне, F1-резултат. Как се изчислява прецизността и припомнянето? Кога кои показатели използваме? Тогава ми зададоха втория въпрос:

Наборът от данни за класификатора на нежелана поща има 99% неспам проби и 1% нежелана поща. За спам записи моделът е 99% правилен, а за неспам моделът е 99% правилен. Каква е прецизността и извикването на модела? (A: Прецизност: 0,5, припомняне: 0,99)

Рундове на място:

1. Кръг за кодиране на данни

В този кръг те ми зададоха няколко въпроса относно вероятността, статистиката и машинното обучение.

Първи въпрос: има зар с n страни. Вероятността за всяка страна на зара е p_i. Напишете функция за генериране на m хвърляния от такъв зар.

Наивен подход към този проблем ще бъде да се изчисли CDF на вероятността и след това да се генерира еднородно произволно число [0,1). Тъй като CDF увеличава функцията от [0,1]. Намерете последния индекс i, така че равномерно произволно число ≤ CDF_i.

Например, да кажем n = 3, p1 = 0,2, p2 = 0,5, p3 = 0,3. Тогава CDF1 = 0,2, CDF2 = 0,7, CDF3 = 1,0. Ако произволното число е между [0, 0,2), произволното хвърляне е 2. Ако произволното число е между [0,2, 0,7), произволното хвърляне е 2 и т.н. Тъй като трябваше да генерираме m такива произволни хвърляния. Сложността на алгоритъма ще бъде O(nm). Оптимизация за това е да се изчисли CDF масив веднъж, в O(n) и след това да се използва двоично търсене, за да се намери индексът на превъртане в O(log(n)). В този случай сложността ще бъде O(n+mlogn)

Вторият въпрос беше да се приложи алгоритъм за дърво на решенията.

Design a basic decision tree algorithm. Focus on termination criteria and OOP design. Assume boolean features and boolean label variable.

В този въпрос интервюиращият очаква цялостно, изчистено прилагане на алгоритъма на дървото на решенията. Започнах със създаването на клас за дърво на решенията с fit и predict методи. Входът X е mxn булева матрица, а входът y е булев вектор с размер m. Тъй като функцията за въвеждане е булева, не е необходимо да търсите праг, за да разделите променливата. Всяка променлива би била разделена на едно място 0,5, т.е. вярно или невярно. Интервюиращият се интересуваше от модулно изпълнение и разделяне на големия проблем на множество подпроблеми и правилно изпълнение.

2. Кръг за проектиране на продукти за извличане на данни

Този кръг беше повече за това как превеждате бизнес проблем в машинен проблем и проектирате цялостно решение около него.

Интервюто ме помоли да проектирам система, която да препоръчва потребители за нова страница/компания, създадена в LinkedIn. Този въпрос изисква сериозно критично мислене.

Събиране на данни: с какви данни разполагате? потребителски данни, данни за страница, потребителска връзка, съществуващи последователи на страница, съдържание, публикувано от потребител, съдържание, публикувано от страница. Потребителят харесва и коментира своя канал, за да извлече предпочитанията си. В тази част прегледах всички източници на данни, които биха могли да бъдат използвани за проектиране на системата. Тази част е изключително важна, защото след като прегледате всички данни, които биха могли да бъдат полезни за проблема, тогава можете да използвате множество комбинации от тези данни, за да излезете с подхода.

Проблем със студено стартиране:Тъй като искахме да препоръчаме потребители за нова страница, имахме много ограничени данни. За нови страници нямаме данни за съществуващи потребители, които са харесали такива страници, публикации, харесвания. По този начин подходи като съвместно филтриране не могат да бъдат използвани директно.

Подходи: Измисли множество подходи въз основа на

  • препоръка въз основа на местоположението
  • намиране на подобни страници
  • афинитет на потребителите към местоположението, бизнеса, секторите
  • изчисляване на потребителско вграждане и вграждане на страници чрез широкомащабно факторизиране на невронни мрежи, използвайки всички данни. След това се използва предварително изчислено вграждане на обект за решаване на проблема със студен старт.

Гмурнахме се дълбоко в последния подход, където проектирах цялостна архитектура за улавяне на цялата тази информация. Процесът на събиране на данни за обучение и оценка

Метрики за оценка:

Как бихте оценили такава система на местно ниво? : Precision@K, Recall@K, nDCG, mAP.

Метрики за внедряване и производство:Обсъдени са ограниченията на латентността и показателите за производството: предварително изчисление на вграждания, процент на взаимодействие с притурки, брой последвани успешни страници, % последвани успешни страници и т.н.

3. Мениджърски кръг домакин:

Мениджърът на домакина ме попита за предишните ми проекти, след което зададе въпрос за компютърното зрение.

Въпрос: Как бихте идентифицирали почти дублирани изображения? В LinkedIn хората създават фалшиви профили, като използват изображението на някой друг. Там изображенията се различават от оригиналното изображение с много минимална разлика, като ниска разделителна способност, изрязани, променена яркост и контраст и т.н. От набор от данни, да кажем милион изображения, трябва да дадете поне 1000 набора от изображения, които смятате, че може да са дубликат.

Интервюиращият ме помоли да отделя малко време и да намеря решение, свързано с това. Дадох множество решения, базирани на автоматичен енкодер, съвпадение на цветна хистограма и загуба на триплети.

4. Кръг за извличане на данни

В този рунд интервюиращият ме помоли да преценя броя на изпитанията, за да получа две последователни победи при честно хвърляне. Да речем, че хвърляте монета, докато не видите две последователни глави. Тогава какъв е очакваният брой опити за получаване на две последователни глави.

Отново многократен подход към този проблем: един подход е да се използва симулация Монте-Карло за изчисляване на броя на опитите, за да се получат две последователни глави и да се вземе средна стойност от множество такива изчисления. Друг подход е да се формулира проблемът по отношение на средни уравнения.

След това интервюиращият се фокусира върху общи знания, базирани на машинно обучение. Какво представлява компромисът на пристрастията и дисперсията? Защо трябва да създадете набор за валидиране? Какви са често срещаните методи за генериране на набор за валидиране? Какви са някои методи за контролиране на пренастройването в невронни мрежи? Как регулирането на L2 помага за контролиране на прекомерното оборудване? Какво е ранно спиране? Какво е изрязване на тежестта и изрязване с градиент? Какво е отпадане? Как тези методи помагат за контролиране на прекомерното оборудване? Как се осъществява отпадането?

5. Кодиращ кръг

Как ще идентифицирате най-ниския общ предшественик на два елемента в двоичното търсенедърво?

Последващи действия: Ами ако това е двоично дърво, а не дърво за двоично търсене?

Прилагане на структура от данни, която добавя, премахва и премахва Random на O(1)?

Заключение

Като цяло наистина ми хареса процеса на интервю. Въпросите бяха на добър стандарт, а интервюиращите също бяха много полезни и интерактивни. Оставете коментар, ако имате въпроси.