[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:ml-engineer\u002Fdl-losses-output-layers":4,"config":170},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":76,"samples":84},"ml-engineer","ML Engineer","","dl-losses-output-layers","Dl Losses Output Layers","en",75,1500,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,43,46,49,52,55,58,61,64,67,70,73],{"key":19,"name":20,"count":11},"cml-distance-clustering-dimreduction","Cml Distance Clustering Dimreduction",{"key":22,"name":23,"count":11},"cml-gradient-boosting-mechanics","Cml Gradient Boosting Mechanics",{"key":25,"name":26,"count":11},"cml-linear-logistic-internals","Cml Linear Logistic Internals",{"key":28,"name":29,"count":11},"cml-probabilistic-models-calibration","Cml Probabilistic Models Calibration",{"key":31,"name":32,"count":11},"cml-svm-kernels-margins","Cml Svm Kernels Margins",{"key":34,"name":35,"count":11},"cml-trees-randomforest-internals","Cml Trees Randomforest Internals",{"key":37,"name":38,"count":11},"dl-architecture-layers","Dl Architecture Layers",{"key":40,"name":41,"count":11},"dl-initialization-optimizers","Dl Initialization Optimizers",{"key":8,"name":9,"count":11},{"key":44,"name":45,"count":11},"dl-normalization-regularization","Dl Normalization Regularization",{"key":47,"name":48,"count":11},"dl-sequence-attention","Dl Sequence Attention",{"key":50,"name":51,"count":11},"dl-training-dynamics-backprop","Dl Training Dynamics Backprop",{"key":53,"name":54,"count":11},"ml-data-preparation","Ml Data Preparation",{"key":56,"name":57,"count":11},"ml-deployment-serving","Ml Deployment Serving",{"key":59,"name":60,"count":11},"ml-experimentation-reproducibility","Ml Experimentation Reproducibility",{"key":62,"name":63,"count":11},"ml-model-selection-tuning","Ml Model Selection Tuning",{"key":65,"name":66,"count":11},"ml-model-training-evaluation","Ml Model Training Evaluation",{"key":68,"name":69,"count":11},"ml-monitoring-drift","Ml Monitoring Drift",{"key":71,"name":72,"count":11},"ml-problem-framing","Ml Problem Framing",{"key":74,"name":75,"count":11},"ml-scaling-performance","Ml Scaling Performance",[77,81],{"key":78,"name":79,"count":80},"classical-ml","Classical ML",450,{"key":82,"name":83,"count":80},"deep-learning","Deep Learning",[85,103,117,130,144,157],{"id":86,"topic":9,"difficulty":87,"body":88,"options":89,"correct_key":97,"explanation":102},"01a0499c-f12c-7e7a-ae05-96c82aaa068d",1,"A classifier's final layer produces a vector of raw scores, and softmax is applied along the class dimension. What is guaranteed about the resulting vector?",[90,93,96,99],{"key":91,"text":92},"a","Each entry falls in (-1, 1) and the entries sum to zero.",{"key":94,"text":95},"b","The largest raw score becomes exactly 1 and all other entries become exactly 0.",{"key":97,"text":98},"c","Each entry falls strictly between 0 and 1 and the entries along the class dimension add up to 1, so the vector can be read as a categorical distribution over the classes.",{"key":100,"text":101},"d","Each entry equals the raw score divided by the sum of the raw scores.","Softmax exponentiates every score, which makes each entry strictly positive, then divides by the sum of those exponentials, which forces the total to 1. Because the exponential is positive and finite, mathematically no entry reaches exactly 0 or exactly 1, although in float32 a score far enough below the maximum does round to 0.0 and leaves its neighbour at 1.0. Hard-assigning 1 to the maximum describes argmax and one-hot encoding, not softmax, and dividing raw scores by their sum is a different normalisation that breaks on negative scores.",{"id":104,"topic":9,"difficulty":105,"body":106,"options":107,"correct_key":100,"explanation":116},"01a0499c-f12e-7027-9055-679dc6684e7b",2,"In PyTorch 2.8 you run `torch.softmax(torch.tensor([2.0, 1.0, 0.0]), dim=0)` on CPU. Which output is closest to what is printed?",[108,110,112,114],{"key":91,"text":109},"[0.333, 0.333, 0.333], the uniform distribution over the three classes",{"key":94,"text":111},"[0.500, 0.333, 0.167], i.e. proportional to the raw scores plus one",{"key":97,"text":113},"[0.667, 0.333, 0.000], i.e. proportional to the raw scores themselves",{"key":100,"text":115},"[0.665, 0.245, 0.090]","Softmax computes exp(2), exp(1) and exp(0), which are 7.389, 2.718 and 1.000, then divides each by their sum 11.107. The result is roughly 0.665, 0.245 and 0.090. Because neighbouring scores differ by exactly 1, the ratio between neighbouring probabilities is e, about 2.718, which is the quickest way to recognise the right vector.",{"id":118,"topic":9,"difficulty":105,"body":119,"options":120,"correct_key":100,"explanation":129},"01a0499c-f131-78ca-b0d0-dcee253ed780","Two logit vectors are fed to the same softmax: [1.0, 2.0, 3.0] and [51.0, 52.0, 53.0]. How do the two probability vectors compare, and why does the answer matter for the implementation?",[121,123,125,127],{"key":91,"text":122},"The second vector is far more peaked, because larger raw scores put more of the probability mass onto the maximum entry and squeeze the others toward zero.",{"key":94,"text":124},"The second one is flatter, because the exponentials saturate.",{"key":97,"text":126},"They differ only in the last decimal, because floating point rounds large exponentials.",{"key":100,"text":128},"They are identical: softmax is unchanged when the same constant is added to every score, and implementations subtract the row maximum for exactly this reason.","Adding a constant multiplies every exponential by the same factor, and that factor cancels between numerator and denominator, so the probabilities are untouched. Only the differences between scores matter, never their absolute level. Library implementations subtract the row maximum before exponentiating, which keeps the largest exponent at zero and prevents the sum from overflowing.",{"id":131,"topic":9,"difficulty":132,"body":133,"options":134,"correct_key":94,"explanation":143},"01a0499c-f132-7bad-8506-e637fd1adeb8",3,"A demand model predicts daily order counts. Its head is a single linear unit whose raw output z is read as the logarithm of the expected rate, and training minimises the Poisson negative log-likelihood exp(z) − y·z. On a day with y = 4 orders the head currently outputs z = 0.5. What does the gradient of that example's loss with respect to z equal, and which way does it push the head?",[135,137,139,141],{"key":91,"text":136},"2·(exp(z) − y)·exp(z), which is −7.75 here, because the squared error between the rate and the count is chained through the exponential link.",{"key":94,"text":138},"exp(z) − y, which is −2.35 here, so the head is pushed up until the rate exp(z) reaches the observed count.",{"key":97,"text":140},"1 − y\u002Fexp(z), which is −1.43 here, since the log link makes the update depend on the ratio of count to rate rather than on their difference.",{"key":100,"text":142},"z − log(y), which is −0.89 here, since the log link makes the objective a residual on the log scale.","Differentiating exp(z) − y·z with respect to z gives exp(z) − y, the predicted rate minus the observed count, and that is stationary exactly when exp(z) = y. Verified on PyTorch 2.8: `F.poisson_nll_loss` with `log_input=True` at z = 0.5 and y = 4 reported -0.3513 and an autograd gradient of -2.3513, which is exp(0.5) - 4. The log-input form drops the constant log(y!) term, which is why the reported value can be negative without anything being wrong, and the link keeps the predicted rate positive without any clipping on the output.",{"id":145,"topic":9,"difficulty":105,"body":146,"options":147,"correct_key":91,"explanation":156},"01a0499c-f133-7bc2-a761-c545b9d78d9c","A photo tagging model must attach any subset of 12 tags to an image; a single photo can legitimately carry 'beach', 'sunset' and 'people' at once. What output layer and loss fit this task?",[148,150,152,154],{"key":91,"text":149},"One output unit per tag with an independent sigmoid on each, trained with binary cross-entropy per tag, so several tags can be confidently on at the same time without competing for a shared budget.",{"key":94,"text":151},"One output unit per tag with softmax over the tags, trained with categorical cross-entropy.",{"key":97,"text":153},"A single output unit whose value is rounded to the index of the strongest tag.",{"key":100,"text":155},"One output unit per tag with softmax, then a threshold of 0.5 applied to each probability.","Softmax ties the 12 outputs together by forcing them to sum to 1, so raising the confidence of one tag necessarily lowers the others: that is the wrong structural assumption for a multi-label problem. One sigmoid unit per tag turns each tag into its own yes\u002Fno decision, and binary cross-entropy scores each of those decisions separately, which is the structure a subset-valued label actually has. Thresholding a softmax at 0.5 makes the situation worse, because with 12 competing classes almost nothing ever crosses 0.5.",{"id":158,"topic":9,"difficulty":87,"body":159,"options":160,"correct_key":91,"explanation":169},"01a0499c-f135-7218-9706-a928db8986c6","A network classifies an image into one of 10 mutually exclusive categories. The penultimate feature vector has 256 entries and the loss is `nn.CrossEntropyLoss`. What should the final `nn.Linear` layer be?",[161,163,165,167],{"key":91,"text":162},"`nn.Linear(256, 10)`, emitting one raw logit per category.",{"key":94,"text":164},"`nn.Linear(256, 9)`, because one category is implied by the other nine and adding it would be redundant.",{"key":97,"text":166},"`nn.Linear(256, 10)` followed by `nn.Softmax(dim=1)`, so that the criterion receives proper probabilities.",{"key":100,"text":168},"`nn.Linear(256, 1)`, because cross-entropy needs a single score to compare against the integer label.","Cross-entropy needs one score per class so it can build a distribution over the 10 categories and pick out the target index, which means the layer must be 256 to 10 (2570 parameters including the bias). The criterion consumes raw scores and performs its own normalisation, so an explicit softmax layer in front of it is not what the interface expects. Dropping one class to nine outputs leaves the criterion unable to score that category at all, so it can never be predicted.",{"fields":171,"seniorities":392,"interview_shapes":393,"locales":398,"oauth":400,"question_count":403,"coach_enabled":404,"jd_match_enabled":404},[172,197,217,233,257,270,289,308,330,349,364,386],{"key":173,"name_tr":174,"name_en":174,"sort":87,"specializations":175},"backend","Backend",[176,179,182,185,188,191,194],{"key":177,"name":178,"field":173},"general","Genel",{"key":180,"name":181,"field":173},"go","Go",{"key":183,"name":184,"field":173},"python","Python",{"key":186,"name":187,"field":173},"java","Java",{"key":189,"name":190,"field":173},"csharp","C#\u002F.NET",{"key":192,"name":193,"field":173},"nodejs","Node.js",{"key":195,"name":196,"field":173},"php","PHP",{"key":198,"name_tr":199,"name_en":199,"sort":105,"specializations":200},"frontend","Frontend",[201,202,205,208,211,214],{"key":177,"name":178,"field":198},{"key":203,"name":204,"field":198},"javascript","JavaScript",{"key":206,"name":207,"field":198},"typescript","TypeScript",{"key":209,"name":210,"field":198},"react","React",{"key":212,"name":213,"field":198},"vue","Vue",{"key":215,"name":216,"field":198},"angular","Angular",{"key":218,"name_tr":219,"name_en":219,"sort":132,"specializations":220},"fullstack","Fullstack",[221,222,223,224,225,226,227,228,229,230,231,232],{"key":177,"name":178,"field":218},{"key":180,"name":181,"field":173},{"key":183,"name":184,"field":173},{"key":186,"name":187,"field":173},{"key":189,"name":190,"field":173},{"key":192,"name":193,"field":173},{"key":195,"name":196,"field":173},{"key":203,"name":204,"field":198},{"key":206,"name":207,"field":198},{"key":209,"name":210,"field":198},{"key":212,"name":213,"field":198},{"key":215,"name":216,"field":198},{"key":234,"name_tr":235,"name_en":235,"sort":236,"specializations":237},"devops-cloud","DevOps \u002F Cloud",4,[238,239,242,245,248,251,254],{"key":177,"name":178,"field":234},{"key":240,"name":241,"field":234},"aws","AWS",{"key":243,"name":244,"field":234},"gcp","GCP",{"key":246,"name":247,"field":234},"azure","Azure",{"key":249,"name":250,"field":234},"kubernetes","Kubernetes",{"key":252,"name":253,"field":234},"terraform","Terraform",{"key":255,"name":256,"field":234},"linux","Linux",{"key":258,"name_tr":259,"name_en":259,"sort":260,"specializations":261},"ai-engineer","AI Engineer",5,[262,263,264,267],{"key":177,"name":178,"field":258},{"key":183,"name":184,"field":258},{"key":265,"name":266,"field":258},"llm-rag","LLM\u002FRAG",{"key":268,"name":269,"field":258},"mlops","MLOps",{"key":271,"name_tr":272,"name_en":273,"sort":274,"specializations":275},"database","Veritabanı","Database",6,[276,277,280,283,286],{"key":177,"name":178,"field":271},{"key":278,"name":279,"field":271},"postgresql","PostgreSQL",{"key":281,"name":282,"field":271},"mysql","MySQL",{"key":284,"name":285,"field":271},"mongodb","MongoDB",{"key":287,"name":288,"field":271},"redis","Redis",{"key":290,"name_tr":291,"name_en":292,"sort":293,"specializations":294},"mobile","Mobil","Mobile",7,[295,296,299,302,305],{"key":177,"name":178,"field":290},{"key":297,"name":298,"field":290},"ios-swift","iOS (Swift)",{"key":300,"name":301,"field":290},"android-kotlin","Android (Kotlin)",{"key":303,"name":304,"field":290},"flutter","Flutter",{"key":306,"name":307,"field":290},"react-native","React Native",{"key":309,"name_tr":310,"name_en":311,"sort":312,"specializations":313},"security","Güvenlik","Security",8,[314,315,318,321,324,327],{"key":177,"name":178,"field":309},{"key":316,"name":317,"field":309},"appsec","AppSec",{"key":319,"name":320,"field":309},"offensive-pentest","Offensive \u002F Pentest",{"key":322,"name":323,"field":309},"cloud-security","Cloud Security",{"key":325,"name":326,"field":309},"devsecops","DevSecOps",{"key":328,"name":329,"field":309},"blue-team-incident","Blue Team \u002F Incident",{"key":331,"name_tr":332,"name_en":333,"sort":334,"specializations":335},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[336,337,340,343,346],{"key":177,"name":178,"field":331},{"key":338,"name":339,"field":331},"test-automation","Test Automation",{"key":341,"name":342,"field":331},"sdet","SDET",{"key":344,"name":345,"field":331},"performance-testing","Performance Testing",{"key":347,"name":348,"field":331},"mobile-qa","Mobile QA",{"key":350,"name_tr":351,"name_en":351,"sort":352,"specializations":353},"data-engineer","Data Engineer",10,[354,355,358,361],{"key":177,"name":178,"field":350},{"key":356,"name":357,"field":350},"pipelines-etl","Pipelines \u002F ETL",{"key":359,"name":360,"field":350},"streaming","Streaming",{"key":362,"name":363,"field":350},"warehousing","Warehousing",{"key":365,"name_tr":366,"name_en":367,"sort":368,"specializations":369},"game-dev","Oyun Geliştirme","Game Development",11,[370,371,374,377,380,383],{"key":177,"name":178,"field":365},{"key":372,"name":373,"field":365},"unity-csharp","Unity (C#)",{"key":375,"name":376,"field":365},"unreal-cpp","Unreal (C++)",{"key":378,"name":379,"field":365},"gameplay","Gameplay",{"key":381,"name":382,"field":365},"graphics-rendering","Graphics \u002F Rendering",{"key":384,"name":385,"field":365},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":5,"name_tr":6,"name_en":6,"sort":387,"specializations":388},12,[389,390,391],{"key":177,"name":178,"field":5},{"key":78,"name":79,"field":5},{"key":82,"name":83,"field":5},[14,15,16],{"junior":394,"mid":396,"senior":397},{"questions":395,"median_sec":3},20,{"questions":395,"median_sec":3},{"questions":395,"median_sec":3},[399,10],"tr",[401,402],"google","github",28050,true]