Kaynak: Heart of the Machine
Bu makale hakkında 2380 kelime 7 dakika okumanız tavsiye edilir.
Bu projede yazar, herkes için eksiksiz bir röportaj bilgi noktaları, programlama soruları ve çözümleri ve çeşitli teknoloji şirketlerinden mülakat soruları sağlayan bir ML algoritma mühendisi mülakat kılavuzu hazırladı.
Bahar gelir ve yakında işe alımlar başlayacak. Bu projede yazar, herkes için eksiksiz bir röportaj bilgi noktaları, programlama soruları ve çözümleri ve çeşitli teknoloji şirketlerinden mülakat soruları sağlayan bir ML algoritma mühendisi mülakat kılavuzu hazırladı. Şu anda GitHub projesinin 10.000'den fazla koleksiyonu var. Denemek isteyenler gelip deneyin.
Proje adresi: https://github.com/imhuay/Algorithm_Interview_Notes-ChineseAşağıdakiler tüm projenin yapısını göstermektedir: Makine öğreniminden matematiğe, esas olarak notlar ve görüşme bilgi noktaları sağlar. Okuyucular genel bilgi yapısını gözden geçirebilirler. Algoritmadan yazılı sınava kadar temel sorular ve çözümler daha sonra verilir Onlara göre genel problem çözme seviyesi ve programlama becerileri geliştirilebilir.
Bilgi noktaları ile görüşmePek çok türde mülakat sorusu var, ancak çok fazla makine öğrenimi bilgisi var. Öyleyse ilkbaharda işe alım veya ilkbaharda iş değişikliği için, neden makine öğreniminin temel bilgilerini tekrar etmiyorsunuz? Bu GitHub projesinde, yazarın ilk bölümü esas olarak her bir alt alanda makine öğrenimini ve bilgi noktalarını tanıttı. Bilgi noktalarının her biri yalnızca en temel kavramları sağlar. Okuyucular alışılmadık algoritmalarla karşılaşırsa veya bilgi boşluklarıyla karşılaşırsa, ilgili literatürü daha fazla okuyabilirler.
Proje esas olarak makine öğrenimi, derin öğrenme, doğal dil işleme ve matematikten ayrıntılı bilgi noktaları sağlar.Yazar, NLP'ye daha fazla önem verdiği için ayrıntılı bilgisayar görüşü notları sağlamadı.
Makine öğrenme
Her şeyden önce, makine öğrenimi için proje esas olarak makine öğreniminin genel durumunu dört yönden özetliyor: temel kavramlar, temel uygulamalar, temel algoritmalar ve entegre öğrenme konuları. "Sapma ve varyans nasıl tartılır?", "Üretken model ile ayrımcı model arasındaki fark nedir?", "Önceki ve sonraki olasılıklar nelerdir ve dönüştürülebilirler mi?" Gibi en temel mülakat soruları temel kavramlar olabilir. .
Bu bilgi noktalarının genellikle yeni başlayanlar tarafından anlaşılması gerekir ve temel MO uygulaması için, sorular temel olarak geleneksel MO geliştirme sürecinde iyi bir işin nasıl yapılacağı perspektifinden sorulur. Örneğin, "Hiperparametreleri nasıl seçersiniz, hiperparametreler için bazı temel arama yöntemlerini tanıtabilir misiniz?", "Karışıklık matrisi, doğruluk, kesinlik, geri çağırma veya F1 değeri nedir ve bunları modelin kalitesini ölçmek için nasıl kullanılır?" , "Örneğin, veri temizleme ve ön işlemenin ana sürecini tanıtabilir misiniz?".
Bu sorular ilk iki bölümdeki bilgi noktalarında yanıtlanabilir. İkinci bölümde, en basit Lojistik regresyondan karmaşık gradyan artırma ağacına kadar birçok temel algoritma vardır. Bu kısım, ana makine öğrenme algoritmalarını özetler:
Bu algoritmaların her biri temel kavramları sağlar. Örneğin, karar ağacındaki CART algoritması için notlar esas olarak Li Hang'ın "İstatistiksel Öğrenme Metodu" ndaki açıklamayı aktarır:
Son olarak, makine öğreniminin entegrasyon yöntemleriyle ilgili bir konusu vardır. Vektör makinelerini desteklemenin yanı sıra, entegrasyon yöntemleriyle ilgili sorular da ML'de daha önemlidir, çünkü XGboost ve random forest gibi yöntemler geleneksel ML'de birinci sınıf olmalıdır ve sorulma olasılığı çok daha yüksektir.
Derin öğrenme
Derin öğrenmenin içeriği nispeten büyüktür ve şu anda pek çok not veya materyal vardır, ancak derin öğrenme sorununun makine öğrenimi kadar zor olmadığını hissedebiliriz. En fazla, evrişimli ağı elle itme destek vektör makinesi gibi ifadeden itmek yerine elle bir geri yayılım algoritmasını zorlayacağız. Derin öğrenmenin temelini atmak istiyorsanız, aslında, en iyi yol Ian Goodfellow'un "Derin Öğrenmesini" öğrenmektir, bu kitabın sadece ilk iki bölümünü okumamız gerekir: Uygulamalı Matematik ve Makine Öğrenimi Vakfı; Derin Ağ: Modern Uygulama. Üçüncü bölüm çok sayıda son teknoloji araştırma içerdiğinden, şimdilik öğrenmek için acele etmemize gerek yok.
Bu proje, temel olarak aşağıdaki yönlerden derin öğrenme mülakat bilgi noktalarını tanıtmaktadır:
İlk 6 konunun tümü giriş notlarıdır ve her konunun birçok özel içeriği vardır.Bunların arasında, sıra modelleme konusu, sıra modellemenin gizemini keşfetmek için döngüden evrişime kadar makinenin kalbini de aktarır. Aşağıda, optimizasyon algoritması konusunun içeriği gösterilmektedir:
"Derin Öğrenme" nin son derlemesinde, proje yazarı elliden fazla derin öğrenme sorusu verdi ve bu sorulara dayalı olarak "Derin Öğrenme" deki bilgi noktalarını tanıttı. Aşağıda sorunun bir örneği verilmiştir ve farklı yıldız işaretleri sorunun zorluğunu gösterir:
Doğal dil işleme ve matematik
Aşağıdaki doğal dil işleme de yakın zamanda güncellendi. Şu anda tanıtılan ana yönler şunlardır:
Aslında, NLP'nin birçok bilgi noktası temel içerik olarak kabul edilmez, bu da inceleme içeriğinin kendi öğrenme alanımıza göre toplanmasını gerektirir. Bununla birlikte, NLP temelleri veya kelime yerleştirme gibi bilgi noktaları, proje yazarı tarafından ayrıntılı olarak sunulur ve bunlar aynı zamanda NLP mülakatları için temel bilgilerdir.
Son olarak, algoritma mühendisi görüşmelerinin temeli olan bazı matematiksel bilgi noktaları vardır. Örneğin, Toutiao algoritma mühendisinin stajyer görüşmesi şu soruyu soracaktır: "Daire üzerinde rastgele 3 nokta seçildiyse, bu 3 noktanın akut bir üçgen oluşturma olasılığı?" Veya bir integral gibi bir şey. Proje yazarı mülakat için temel olarak aşağıdaki bilgi noktalarını hazırladı:
Derin öğrenmenin özü, esas olarak doğrusal olmayan aktivasyon işlevi, gradyan inişi ve geri yayılımı içerir.
Algoritma soruları ve yazılı sorularGörüşmeleri programlama için temel algoritmalar vazgeçilmezdir ve genellikle veri yapısı, dinamik programlama veya permütasyon ve kombinasyon gibi yazılı test sorularına yansıtılır. Birçok geliştirici yazılı test sorularını çözmekte zorlanabilir, çünkü soru size onu çözmek için hangi temel algoritmanın gerekli olduğunu söylemiyor.Soruyu adım adım analiz etmemiz için bize güveniyoruz. Bu, çeşitli temel algoritmalara aşina olmamızı gerektirir. Proje yazarı aşağıdaki temel algoritma konularını sağlar:
Bu algoritmik problemler, belirli problemleri, problem çözme fikirlerini ve bunlara karşılık gelen problem çözme kodlarını ortaya çıkaracaktır. Örneğin, veri yapısında, B ağacının A ağacının bir alt ağacı olup olmadığını nasıl belirleyebiliriz?
Problemin çözümü için kod aşağıda gösterilmiştir: Temel olarak temel algoritmaların çözümlerinin C ++ ile yazıldığını ve yazarın Offer ve Leetcode çözümlerine başvuracağını unutmayın.
class Solution { halka açık: bool HasSubtree (TreeNode * p1, TreeNode * p2) { if (p1 == nullptr || p2 == nullptr) // Boş ağacın herhangi bir ağacın alt yapısı olmadığı kabul edildi yanlış dönüş; return isSubTree (p1, p2) // Altyapının aynı olup olmadığını belirle || HasSubtree (p1- > left, p2) // A ağacında B ağacının kök düğümüyle aynı çocuk düğümü yinelemeli olarak bulun || HasSubtree (p1- > sağ, p2); } bool isSubTree (TreeNode * p1, TreeNode * p2) { if (p2 == nullptr) true döndürür; // Bu iki yargının sırasına dikkat edin eğer (p1 == nullptr) yanlış döndürür; eğer (p1- > val == p2- > val) dönüş isSubTree (p1- > sol, s2- > left) // Sol ve sağ alt ağaçları yinelemeli olarak değerlendirin isSubTree (p1- > sağ, s2- > sağ); Başka yanlış dönüş; } };Ek olarak, proje ayrıca IO şablonları ve gerekli algoritma şablonları sağlar. Yazar, LeetCode gibi birçok yazılı testin I / O'yu otomatik olarak tamamlayamayacağını belirtti. Veri giriş / çıkışlarını manuel olarak tamamlamamız gerekiyor ve ACM deneyimimiz yoksa, bunun için büyük olasılıkla çok zaman kaybedeceğiz. Bu nedenle, burada özetlenen birkaç yaygın IO şablonu, diğer algoritma şablonları gibi görüşmeleri programlamak için çok faydalıdır.
Örneğin, belirsiz sayıda Giriş girersek ve bitiş işareti olarak özel bir girdi kullanırsak, C dilinde uygulanan şablon şu şekildedir:
// Örnek 1 int a, b; while (scanf ("% d% d", a, b)! = EOF (a! = 0 b! = 0)) { // ... } // veya while (scanf ("% d% d", a, b)! = EOF (a || b)) { // ... } // örnek 2 int n; while (scanf ("% d", n)! = EOF n! = 0) { // ... }C ++ 'da uygulanan şablon:
// Örnek 1 int a, b; while (cin > > a > > b) { eğer (a == 0 b == 0) kırmak; // ... } // örnek 2 int n; while (cin > > n n! = 0) { // ... }Gerçek röportaj soruları
Son olarak, proje yazarı ayrıca teknoloji şirketleri için bir düzineden fazla gerçek mülakat sorusu topladı ve içeriği ve deneyimi bir taraftan üç tarafa tanıttı.
Örneğin, aşağıdaki başlık / bayt aşma-derin öğrenme / NLP yönüne üç taraflı bir genel bakış:
Aşağıda gösterildiği gibi, puan kart oyunu olan 18 Ağustos'ta ByteDance'ın yazılı test soruları da aşağıda gösterildiği gibi özel mülakat soruları da sağlanacaktır:
Elbette, sorun göz önüne alındığında, ilgili çözüm de sağlanacaktır:
# Giriş işleme n = int (giriş ()) x, y =, aralıktaki i için (n): _x, _y = list (harita (int, input (). split ())) x.append (_x) y.append (_y) xy = liste (zip (x, y)) xy = sıralı (xy, anahtar = lambda t: t) ret = 0 toplam (x)% 2 == 0 ise: # Tüm x'lerin toplamı çift ise print (sum (y)) # doğrudan tüm y'nin toplamını çıkar Başka: aralıktaki i için (len (xy)): eğer xy % 2 == 1: # x'teki tek öğeyi kaldır ret = toplam () baskı (ret) kırmak Editör: Wen Jing redaksiyon: Gong Li - Bitiş -Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.