সরাসরি পর্বে যান
পর্ব ১২ · ৭৭-এর মধ্যে · মডিউল ৩

Convexity — কেন কিছু loss সহজ আর কিছু কঠিন

Convexity — Convex Sets and Functions, First- and Second-Order Conditions, Strong Convexity, Smoothness and Jensen's Inequality for Machine Learning

Taught in Bangla, this lesson defines convex sets and functions through chords, tangents and positive semidefinite Hessians, and proves that a local minimum of a convex function is global. It classifies common ML losses, builds convexity proofs from simple pieces, explains strong convexity, smoothness and condition number, applies Jensen's inequality, and runs a numerical convexity checker and multi-start experiments in the page.

এই পর্বে যা শিখবেন

  • Convex set আর convex function-এর সংজ্ঞা, ছবি আর হাতে জ্যা-পরীক্ষা
  • প্রথম ক্রমের (স্পর্শক নিচে) আর দ্বিতীয় ক্রমের (Hessian PSD) শর্ত, আর কেন convex সমস্যায় খারাপ local minimum থাকে না
  • কোন ML loss parameter-এ convex আর কোনটি নয়, আর convexity রক্ষা করে এমন অপারেশন দিয়ে তা প্রমাণ করা
  • Strong convexity, L-smoothness আর condition number κ, Hessian-এর eigenvalue থেকে
  • Jensen-এর অসমতা, আর NumPy দিয়ে একটি সংখ্যাগত convexity-পরীক্ষক বানানো ও তার সীমা বোঝা

AI-এর ভিত্তি কোর্সের পর্ব ৩৪-এ gradient descent দেখেছেন, আর শুনেছেন যে সে local minimum বা saddle-এ আটকে যেতে পারে; পর্ব ৪৪-এ সেই আটকে যাওয়া এড়াতে simulated annealing-এর মতো কৌশল এসেছিল। এই পর্বের প্রশ্ন উল্টো দিক থেকে: কোন সমস্যায় আটকে যাওয়ার ভয়ই নেই, আর সেটি আগে থেকে কীভাবে জানবেন? উত্তরের নাম convexity. চালানো যায় এমন চারটি ব্লক পাতাতেই চলে (ব্রাউজারের Python আর NumPy); প্রথমবার প্যাকেজ নামতে কয়েক সেকেন্ড লাগে।

১ · কেন convexity — একটি বাটি বনাম পাহাড়ি এলাকা

কুয়াশার রাতে আপনি একটি মাঠে দাঁড়িয়ে, চোখে কিছুই দেখছেন না, শুধু পায়ের নিচের ঢাল টের পান। লক্ষ্য সবচেয়ে নিচু জায়গায় যাওয়া। মাঠটি যদি একটি বিশাল বাটির মতো হয়, তাহলে ঢাল ধরে নামতে থাকলেই একদিন তলায় পৌঁছাবেন, আর সেটিই পুরো মাঠের সবচেয়ে নিচু জায়গা। কিন্তু সিলেটের চা-বাগানের মতো উঁচু-নিচু টিলার এলাকায় একই কৌশলে আপনি কোনো এক ছোট খাদে নেমে থামবেন; পাশের টিলার ওপারে আরও গভীর খাদ আছে কি না, পায়ের ঢাল তা বলতে পারে না। প্রথম মাঠটি convex, দ্বিতীয়টি non-convex.

ML-এ “মাঠ” হলো loss L(w), আর “পায়ের ঢাল” হলো gradient. প্রায় সব optimizer শুধু স্থানীয় তথ্য দেখে: এখনকার মান, ঢাল, বড়জোর বাঁক। তাই একটি মৌলিক প্রশ্ন ওঠে: স্থানীয় তথ্য থেকে পাওয়া উত্তর কি সারা মাঠের সেরা উত্তর? Local minimum মানে আশেপাশের সবার চেয়ে নিচু বিন্দু; global minimum মানে সারা মাঠের সবচেয়ে নিচু। Convex function-এ এই দুটি সবসময় এক, আর এজন্যই convex সমস্যাকে “সহজ” বলা হয়: optimizer যেখানে থামে, সেটিই উত্তর, আর সেটি যাচাইও করা যায়।

সহজ মানে কিন্তু সস্তা নয়। কোটি সারির logistic regression convex, তবু চালাতে সময় লাগে; আর গতি নির্ভর করে বাটিটি কতটা সরু বা চ্যাপ্টা তার ওপর (অংশ ৭)। আবার কঠিন মানে অসম্ভবও নয়: neural network-এর loss non-convex, তবু সেগুলো প্রতিদিন train হয়। এই পর্ব দুই জগতের সীমারেখা স্পষ্ট করে, আর পরের পাঁচটি পর্বের ভিত্তি গড়ে: পর্ব ১৩ (Gradient descent-এর পরিবার — batch, SGD, mini-batch আর learning-rate schedule) আর পর্ব ১৪ (Momentum, RMSProp আর Adam — derive করে আর তুলনা করে) convex বাটিতে গতির হিসাব দেবে, পর্ব ১৫ (Second-order পদ্ধতি — Newton, L-BFGS আর line search) বাঁক ব্যবহার করবে, পর্ব ১৬ (Constraint-সহ optimization — Lagrange multiplier আর KKT) convex set-এর ওপর কাজ করবে, আর পর্ব ১৭ (Regularization-এর তত্ত্ব — L1/L2-এর জ্যামিতি, MAP আর early stopping) এখানকার strong convexity-কে কাজে লাগাবে।

২ · Convex set আর convex function — সংজ্ঞা আর ছবি

Convex set: একটি বিন্দুর সমষ্টি C-কে convex set বলে, যদি C-এর যেকোনো দুটি বিন্দু a, b নিলে তাদের যোগ করা সরলরেখার প্রতিটি বিন্দুও C-এর ভেতরে থাকে। সরলরেখার বিন্দুগুলো লেখা হয় t·a + (1 − t)·b আকারে, যেখানে t হলো ০ থেকে ১-এর মধ্যে একটি সংখ্যা; t = ১-এ a, t = ০-এ b, t = ০.৫-এ ঠিক মাঝখান। এমন ওজনের যোগফলকে বলে convex combination. উদাহরণ: পুরো ℝn, একটি বল ‖w‖ ≤ r, একটি half-space aᵀw ≤ b, আর কয়েকটি convex set-এর ছেদ (যেমন বাজেটের কয়েকটি সীমা একসঙ্গে)। Non-convex উদাহরণ: একটি বলয় বা অর্ধচন্দ্রের আকার, যেখানে দুই প্রান্ত যোগ করা রেখা বাইরে দিয়ে যায়।

Convex function: f-কে convex বলে, যদি তার domain একটি convex set হয় আর সব a, b এবং সব t ∈ [০, ১]-এ:

f(t·a + (1 − t)·b) ≤ t·f(a) + (1 − t)·f(b)

বাঁ দিকটি দুই বিন্দুর মাঝের কোনো জায়গায় f-এর আসল মান; ডান দিকটি (a, f(a)) আর (b, f(b)) যোগ করা জ্যার ওপর সেই জায়গার উচ্চতা। অর্থাৎ জ্যা কখনো লেখচিত্রের নিচে নামে না। অসমতা উল্টো হলে (জ্যা সবসময় নিচে) function-টিকে বলে concave, যেমন log বা √. আর a ≠ b আর ০ < t < ১-এ অসমতা কঠোর (<) হলে বলে strictly convex. আরেকটি সমান সংজ্ঞা: f convex হয় ঠিক তখনই, যখন তার epigraph, অর্থাৎ লেখচিত্রের ওপরের পুরো এলাকা {(w, s) : s ≥ f(w)}, একটি convex set. এই সেতুটিই set আর function-এর দুই সংজ্ঞাকে জোড়ে।

Convex বনাম non-convex — set-এ রেখা ভেতরে, function-এ জ্যা ওপরে

Top: a segment between two points of a set. Bottom: a chord between two points of a graph

Convex and non-convex sets and functions Convex set Non-convex set Convex function Non-convex function রেখা ভেতরে ✓ রেখা বাইরে ✗ জ্যা ওপরে ✓ জ্যা কুঁজের নিচে ✗
ছবি ২.১ — ওপরে set: উপবৃত্তের যেকোনো দুই বিন্দুর রেখা ভেতরে থাকে, কিন্তু দুই-কুঁজের আকারে খাঁজের ওপর দিয়ে রেখা বাইরে যায়। নিচে function: বাটি f(w) = 0.95w²-এ জ্যা লেখচিত্রের ওপরে; double well g(w) = (w² − 1)²-এ দুই খাদের তলা (w = ±১, মান ০) যোগ করা জ্যা মাঝখানের কুঁজের (w = ০, মান ১) নিচ দিয়ে যায়।

নিচের stepper সংজ্ঞাটি দুটি function-এ হাতে চালায়। লক্ষ করুন, convex হওয়ার দাবি “সব a, b, t”-এর ওপর, আর ভাঙার জন্য একটি উদাহরণই যথেষ্ট।

f(t·a + (1−t)·b) ≤ t·f(a) + (1−t)·f(b) ?জ্যা-পরীক্ষা

            
  1. প্রস্তুতি। f(w) = w², দুটি বিন্দু a = −১ আর b = ২. তাদের মান ১ আর ৪; জ্যা হলো (−১, ১) থেকে (২, ৪) পর্যন্ত সরলরেখা।
  2. মাঝখানে। t = ০.৫-এ z = ০.৫, f(z) = ০.২৫, আর জ্যার উচ্চতা ২.৫. লেখচিত্র জ্যার অনেক নিচে।
  3. আরেকটি t. t = ০.২৫-এ z = ১.২৫, f(z) = ১.৫৬২৫, জ্যা ৩.২৫. ফারাক ১.৬৮৭৫, যা ঠিক t(1 − t)(a − b)² = ০.১৮৭৫ × ৯. এই সূত্রটি w²-এর জন্য বীজগণিতে বের করা যায়।
  4. Double well. g(w) = (w² − 1)²-এ a = −১, b = ১ দুটিই খাদের তলা, মান ০. মাঝখানে z = ০-তে g = ১, কিন্তু জ্যার উচ্চতা ০. লেখচিত্র জ্যার ওপরে উঠে গেছে, তাই g convex নয়।
  5. রায়ের নিয়ম। একটি লঙ্ঘন non-convexity প্রমাণ করে। অন্যদিকে যত পরীক্ষাই পাস করুক, convexity প্রমাণ হয় না; তার জন্য লাগে বীজগণিত (এখানে t(1 − t)(a − b)² ≥ ০) বা পরের অংশের শর্ত।

৩ · স্পর্শক নিচে আর Hessian PSD — প্রথম ও দ্বিতীয় ক্রমের শর্ত

জ্যা-পরীক্ষা সংজ্ঞা, কিন্তু অসীম সংখ্যক a, b, t-এ যাচাই করা অসম্ভব। f differentiable হলে দুটি সমান আর বেশি কাজের শর্ত আছে।

প্রথম ক্রমের শর্ত (first-order condition)

Differentiable f convex হয় ঠিক তখনই, যখন সব x, y-তে f(y) ≥ f(x) + ∇f(x)ᵀ(y − x). ডান দিকটি x বিন্দুতে স্পর্শক (একাধিক চলকে স্পর্শক-তল), অর্থাৎ প্রথম ক্রমের Taylor approximation. শর্তটি বলে: প্রতিটি স্পর্শক পুরো লেখচিত্রের নিচে থাকে। একটি বিন্দুর স্থানীয় তথ্য (মান আর ঢাল) পুরো function-এর জন্য একটি নিশ্চিত নিচের সীমা দেয়।

f(y) ≥ f(x) + f′(x)(y − x) ?প্রথম ক্রম

            
  1. একটি অর্ডারের loss. বাজারঘরে একটি অর্ডার ফেরত এসেছে (label ১), model-এর score w. Log loss f(w) = log(1 + e−w). w = ০-তে মান log ২ = ০.৬৯৩১, ঢাল −σ(০) = −০.৫, যেখানে σ হলো sigmoid.
  2. স্পর্শক। T(w) = ০.৬৯৩১ − ০.৫w, একটি সরলরেখা যা w = ০-তে লেখচিত্র ছুঁয়ে যায়।
  3. তিনটি বিন্দুতে যাচাই। w = ২, −২ আর ১-এ f যথাক্রমে ০.১২৬৯, ২.১২৬৯, ০.৩১৩৩; স্পর্শক −০.৩০৬৯, ১.৬৯৩১, ০.১৯৩১. প্রতিবার f বড়। কারণ দ্বিতীয় derivative σ(w)(1 − σ(w)) সবসময় ধনাত্মক, w = ০-তে ০.২৫.
  4. Double well-এ ব্যর্থ। g-এর w = ০-তে ঢাল ০, স্পর্শক সমতল রেখা উচ্চতা ১-এ। কিন্তু w = ১-এ g = ০, স্পর্শকের নিচে। দ্বিতীয় derivative 12w² − 4 এখানে −৪: লেখচিত্র নিচের দিকে বাঁকা।
  5. সবচেয়ে বড় ফল। Convex f-এ যে বিন্দুতে ∇f = 0, সেখানে স্পর্শক সমতল, আর শর্ত বলে সব y-এ f(y) ≥ f(x*): সেটি global minimum. Non-convex g-তে ঢাল শূন্য হলেও সেটি চূড়া হতে পারে।
দ্বিতীয় ক্রমের শর্ত (second-order condition)

দুবার differentiable f (convex domain-এ) convex হয় ঠিক তখনই, যখন প্রতিটি x-এ Hessian ∇²f(x) positive semidefinite, অর্থাৎ তার সব eigenvalue ≥ ০. এক চলকে এটি পরিচিত f″(x) ≥ ০. সব x-এ Hessian positive definite হলে f strictly convex (উল্টোটা সবসময় সত্য নয়: w⁴ strictly convex, কিন্তু w = ০-তে f″ = ০)।

Hessian PSD কীভাবে পরীক্ষা করবেন (eigenvalue, leading minor, Cholesky) তা পর্ব ১০-এ, আর least squares-এর 2XᵀX ও logistic-এর XᵀSX Hessian derive করা হয়েছে পর্ব ১১-এ। এখানে নতুন কথাটি শব্দ “প্রতিটি x-এ”। পর্ব ১০-এর পরীক্ষা একটি বিন্দুর আশেপাশের আকার বলে; convexity একটি সার্বিক দাবি। Quadratic function-এ Hessian সব জায়গায় একই, তাই একবারের পরীক্ষাই যথেষ্ট; কিন্তু logistic বা neural network-এ Hessian বিন্দুভেদে বদলায়। Logistic-এর ক্ষেত্রে XᵀSX সব w-এ PSD, তাই প্রমাণ হয়ে যায়। Neural network-এ কিছু বিন্দুতে Hessian-এর ঋণাত্মক eigenvalue থাকে, তাই একটি বিন্দুতে “এখানে বাটির মতো” দেখে সারা loss-কে convex বলা যায় না।

নিচের ব্লক পাঁচটি function-কে ছবিতে দেখায়: ওপরে এক চলকে দুটি স্পর্শক, নিচে দুই চলকে contour (সমান মানের রেখা)। কোনো স্পর্শক লেখচিত্রের কতটা ওপরে ওঠে, তার সবচেয়ে বড় মাপও ছাপা হয়।

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(42)
X = rng.normal(size=(40, 2))
y = (X @ [1.5, -1.0] + rng.normal(0, 0.8, 40) > 0).astype(float)

f_cvx = lambda w: np.logaddexp(0, -w) + 0.1 * w**2          # 1-D log loss + ছোট L2
d_cvx = lambda w: -1 / (1 + np.exp(w)) + 0.2 * w
f_ncv = lambda w: (w**2 - 1)**2 + 0.3 * w                   # দুটি খাদ
d_ncv = lambda w: 4 * w * (w**2 - 1) + 0.3

w = np.linspace(-2, 2, 200)
fig, ax = plt.subplots(2, 2, figsize=(9, 7))
for a, f, d, x0s, name in [(ax[0, 0], f_cvx, d_cvx, [-1.0, 1.2], "convex: log loss + L2"),
                           (ax[0, 1], f_ncv, d_ncv, [0.0, 1.2], "non-convex: double well")]:
    a.plot(w, f(w), "k", lw=2)
    for x0 in x0s:
        a.plot(w, f(x0) + d(x0) * (w - x0), "--", label=f"tangent at w={x0}")
        print(f"{name:24} x0={x0:4}: min(f - tangent) = {np.min(f(w) - f(x0) - d(x0)*(w - x0)):7.3f}")
    a.set_ylim(-1.5, 4); a.set_title(name); a.set_xlabel("w"); a.legend(fontsize=8)

g = np.linspace(-2.5, 2.5, 120)
W1, W2 = np.meshgrid(g, g)
Z = X @ np.stack([W1.ravel(), W2.ravel()])
L_log = np.mean(np.logaddexp(0, Z) - y[:, None] * Z, axis=0).reshape(W1.shape) + 0.05 * (W1**2 + W2**2)
L_qrt = (W1**2 - 1)**2 + W2**2
for a, L, name in [(ax[1, 0], L_log, "log loss + L2, 40 orders"), (ax[1, 1], L_qrt, "(w1^2-1)^2 + w2^2")]:
    a.contour(W1, W2, L, levels=15, cmap="viridis")
    i = np.unravel_index(np.argmin(L), L.shape)
    a.plot(W1[i], W2[i], "r*", ms=14)
    a.set_title(name); a.set_xlabel("w1"); a.set_ylabel("w2")
ax[1, 1].plot([-1, 1], [0, 0], "r*", ms=14)
fig.subplots_adjust(hspace=0.35, wspace=0.25)
plt.show()

আসল আউটপুট (ব্রাউজারের Python), ছবির নিচে ছাপা চারটি লাইন:

convex: log loss + L2    x0=-1.0: min(f - tangent) =   0.000
convex: log loss + L2    x0= 1.2: min(f - tangent) =   0.000
non-convex: double well  x0= 0.0: min(f - tangent) =  -1.000
non-convex: double well  x0= 1.2: min(f - tangent) =   0.000

“min(f − tangent)” হলো ২০০টি বিন্দুতে লেখচিত্র আর স্পর্শকের ফারাকের সবচেয়ে ছোট মান। Convex function-এ দুটি স্পর্শকেই এটি ০.০০০: স্পর্শক কেবল নিজের বিন্দুতে ছোঁয়, আর সব জায়গায় নিচে। Double well-এর w = ০-এর স্পর্শকে মান −১.০০০, অর্থাৎ কোথাও লেখচিত্র স্পর্শকের পুরো ১ একক নিচে নেমে গেছে (ওপরের ডান ছবির নীল রেখা)। কিন্তু একই function-এ w = ১.২-এর স্পর্শক এই ব্যবধিতে পুরোপুরি নিচে: non-convex function-এও কিছু স্পর্শক নিচে থাকতে পারে, শর্তটি ভাঙতে একটিই যথেষ্ট। নিচের দুটি ছবিতে পার্থক্য আরও স্পষ্ট। বাঁয়ে ৪০টি কাল্পনিক অর্ডারের log loss (সঙ্গে ছোট L2): contour-গুলো একটির ভেতরে আরেকটি, একটিমাত্র কেন্দ্র (তারা)। ডানে (w1² − 1)² + w2²: দুটি আলাদা উপত্যকা, w = (±১, ০), আর মাঝে (০, ০)-তে একটি saddle point.

৪ · কেন convex সমস্যায় খারাপ local minimum নেই

অংশ ৩-এর স্পর্শক-যুক্তি দেখিয়েছে, ঢাল শূন্যের বিন্দু global minimum. কিন্তু hinge বা lasso-র মতো ভাঁজওয়ালা loss-এ ঢাল সব জায়গায় নেই। তাই একটি আরও সাধারণ যুক্তি দরকার, যা শুধু জ্যার সংজ্ঞা ব্যবহার করে। এটি পরীক্ষা আর ইন্টারভিউতে প্রায়ই প্রমাণ করতে বলা হয়।

ধরি x* local, কিন্তু global নয়প্রমাণ

            
  1. উল্টোটা ধরে নেওয়া। Convex f(x) = (x − ৩)²-এ ধরে নিই x* = ১ একটি local minimum (মান ৪), অথচ y = ৩-এ মান ০. লক্ষ্য দেখানো যে এমন x* থাকতে পারে না।
  2. রেখা ধরে হাঁটা। x* থেকে y-এর দিকে বিন্দু zt = ১ + ২t. জ্যার সংজ্ঞা বলে f(zt) জ্যার উচ্চতা ৪ − ৪t-এর বেশি হতে পারে না।
  3. সংখ্যায়। t = ০.৫, ০.১, ০.০১-এ f যথাক্রমে ১, ৩.২৪, ৩.৯২০৪; প্রতিবার জ্যার সীমা ২, ৩.৬, ৩.৯৬-এর নিচে, আর সবই ৪-এর কম।
  4. বিরোধ। t যত ছোট, zt তত x*-এর কাছে, তবু f(zt) < f(x*). তাই x*-এর কোনো ছোট পাড়াতেই সে সবচেয়ে নিচু নয়, অর্থাৎ local minimum নয়। সাধারণ convex f-এও যুক্তি হুবহু এক: কোনো local minimum-এর চেয়ে নিচু বিন্দু থাকতে পারে না।
  5. Non-convex-এ কোথায় ভাঙে। Double well h-এ w = ০.৯৬০১-এ local minimum (০.২৯৪১), w = −১.০৩৫৬-এ global (−০.৩০৫৪)। t = ০.১-এ h(z) = ০.৪০৫৭, যা জ্যার ০.২৩৪২-এর ওপরে; জ্যার সীমাই নেই, তাই local minimum টিকে থাকে।

একই যুক্তি থেকে আরও দুটি দরকারি ফল আসে। প্রথম: convex f-এর সব minimizer মিলে একটি convex set. দুটি সর্বনিম্ন বিন্দু থাকলে তাদের মাঝের পুরো রেখাও সর্বনিম্ন; সর্বনিম্ন “ছড়ানো” থাকতে পারে (যেমন কলাম নির্ভরশীল হলে least squares-এর অসংখ্য সমাধান), কিন্তু কখনো আলাদা আলাদা দ্বীপে নয়। দ্বিতীয়: strictly convex f-এর সর্বনিম্ন বিন্দু বড়জোর একটি। “বড়জোর” কথাটি জরুরি: ew strictly convex, কিন্তু তার কোনো সর্বনিম্ন বিন্দু নেই, শুধু w → −∞-এ মান ০-এর দিকে যায়। Separable ডেটার logistic regression-এ ঠিক এটিই ঘটে (প্রশ্ন ০৩)।

এবার এই তত্ত্ব সংখ্যায়। নিচের ব্লক gradient descent ২০টি এলোমেলো শুরু থেকে চালায়, দুটি function-এ: convex log loss (সঙ্গে L2, λ = ০.১), আর f(w) = (w1² − 1)² + (w2² − 1)² + 0.3w1 + 0.2w2, যার চারটি খাদ, প্রতিটির গভীরতা আলাদা। শেষ বিন্দুগুলো তিন দশমিকে গোল করে আলাদা কয়টি, তা গোনা হয়।

import numpy as np

rng = np.random.default_rng(42)
X = rng.normal(size=(40, 2))                  # একই কাল্পনিক বাজারঘর ডেটা
y = (X @ [1.5, -1.0] + rng.normal(0, 0.8, 40) > 0).astype(float)
lam = 0.1

def loss_cvx(w):                               # log loss + (lam/2)|w|^2: convex
    z = X @ w
    return np.mean(np.logaddexp(0, z) - y * z) + lam / 2 * w @ w
def grad_cvx(w):
    p = 1 / (1 + np.exp(-(X @ w)))
    return X.T @ (p - y) / len(y) + lam * w

loss_ncv = lambda w: (w[0]**2 - 1)**2 + (w[1]**2 - 1)**2 + 0.3*w[0] + 0.2*w[1]
grad_ncv = lambda w: np.array([4*w[0]*(w[0]**2 - 1) + 0.3, 4*w[1]*(w[1]**2 - 1) + 0.2])

def run(loss, grad, eta, steps=400, starts=20):
    ends = []
    for w in rng.uniform(-2, 2, (starts, 2)):
        for _ in range(steps):
            w = w - eta * grad(w)
        ends.append(np.round(w, 3))
    uniq, count = np.unique(np.array(ends), axis=0, return_counts=True)
    print(f"{len(uniq)} distinct endpoint(s) from {starts} starts")
    for u, c in zip(uniq, count):
        print(f"   w = {u}   loss = {loss(u):.4f}   reached {c:2d} times")

print("convex log loss + L2:");  run(loss_cvx, grad_cvx, eta=1.0)
print("non-convex 4-well   :");  run(loss_ncv, grad_ncv, eta=0.05)

আসল আউটপুট (ব্রাউজারের Python):

convex log loss + L2:
1 distinct endpoint(s) from 20 starts
   w = [ 1.004 -0.606]   loss = 0.5534   reached 20 times
non-convex 4-well   :
4 distinct endpoint(s) from 20 starts
   w = [-1.036 -1.024]   loss = -0.5079   reached  5 times
   w = [-1.036  0.974]   loss = -0.1080   reached  5 times
   w = [ 0.96  -1.024]   loss = 0.0917   reached  4 times
   w = [0.96  0.974]   loss = 0.4916   reached  6 times

Convex loss-এ ২০টি শুরুর সবকটি একই বিন্দু (১.০০৪, −০.৬০৬)-এ পৌঁছেছে, loss ০.৫৫৩৪; এটি আগের ব্লকের বাঁদিকের নিচের ছবির তারার জায়গা। চার-খাদের function-এ ২০টি শুরু চারটি আলাদা বিন্দুতে থেমেছে, প্রায় সমান ভাগে (৫, ৫, ৪, ৬ বার)। loss −০.৫০৭৯ থেকে ০.৪৯১৬, অর্থাৎ ২০টির মধ্যে মাত্র ৫টি শুরু global minimum পেয়েছে, বাকি ১৫টি থেমেছে খারাপ local minimum-এ। প্রতিটি থামার বিন্দুতে gradient প্রায় শূন্য, তাই gradient দেখে কোনটি ভালো বোঝার উপায় নেই। Convex ক্ষেত্রে “একাধিক শুরু থেকে চালানো” অর্থহীন খরচ; non-convex ক্ষেত্রে এটিই সবচেয়ে সরল প্রতিরক্ষা, যেমন scikit-learn-এর KMeans-এর n_init. মনে রাখুন, এটি একটি ছোট উদাহরণের এক run; বাস্তব non-convex সমস্যায় খাদের সংখ্যা জানা থাকে না।

৫ · ML-এর কোন loss convex, কোনটি নয়

প্রথমে একটি সূক্ষ্ম কিন্তু জরুরি কথা: convexity সবসময় “কোন চলকের সাপেক্ষে” প্রশ্ন। ML-এ আমরা parameter w বদলাই, ডেটা স্থির; তাই প্রশ্ন হলো L(w) w-এ convex কি না। Squared error (y − ŷ)² অনুমান ŷ-এ convex; linear model-এ ŷ = xᵀw হলে w-এও convex থাকে। কিন্তু neural network-এ ŷ হলো w-এর একটি জটিল, বহুস্তর function, তাই একই squared error w-এ non-convex হয়ে যায়। Loss-এর সূত্র একই, model বদলালে উত্তর বদলায়। AI-এর ভিত্তি কোর্সের পর্ব ৫৯-এ log loss আর পর্ব ০২-এ ছয়টি loss-এর আকার দেখেছেন; এবার তাদের parameter-এর সাপেক্ষে শ্রেণিবিন্যাস।

Model ও lossParameter-এ convex?কারণ এক লাইনে
Least squares, ridgeহ্যাঁ (ridge-এ strongly)Hessian 2XᵀX ⪰ 0; ridge-এ 2(XᵀX + αI) ⪰ 2αI
Logistic regression (log loss)হ্যাঁHessian XᵀSX, S-এর ঘর p(1 − p) ≥ ০
Linear SVM (hinge)হ্যাঁ, তবে ভাঁজওয়ালাmax(0, 1 − y·xᵀw) দুটি affine function-এর সর্বোচ্চ
Lasso (L1), elastic netহ্যাঁ‖w‖1 = ∑ max(wj, −wj); convex যোগ convex
Huber, quantile (pinball) loss-এর linear modelহ্যাঁঅনুমানে convex loss ∘ affine
Neural network (এক বা বেশি hidden layer)নাHidden unit অদলবদল করলে একই loss; বহু minimum আর saddle
k-means (কেন্দ্রের সাপেক্ষে)নাপ্রতিটি বিন্দুর “কাছের কেন্দ্রের দূরত্ব” = কয়েকটি quadratic-এর সর্বনিম্ন
Gaussian mixture-এর likelihoodনাComponent-এর লেবেল অদলবদলে একই মান; log-এর ভেতরে যোগফল
Matrix factorization (UVᵀ)না (দুটি একসঙ্গে)U স্থির রাখলে V-তে convex, কিন্তু একসঙ্গে নয়

Non-convexity-র একটি সাধারণ উৎস প্রতিসাম্য। k-means-এ দুটি কেন্দ্র (c1, c2) = (−১.৫, ১.৫) একটি সমাধান হলে (১.৫, −১.৫)-ও একই loss দেয়, কারণ কোন কেন্দ্রের নাম “১” তাতে কিছু আসে যায় না। কিন্তু তাদের মাঝখান (০, ০) মানে দুটি কেন্দ্রই এক জায়গায়, যা অনেক খারাপ। দুটি সমান ভালো বিন্দুর গড় খারাপ: জ্যার সংজ্ঞার সরাসরি লঙ্ঘন। Neural network-এ hidden neuron-গুলোর ক্রম অদলবদল, আর mixture model-এ component-এর লেবেল অদলবদল একই কাজ করে।

এখন অংশ ২ আর ৩-এর তিনটি সংজ্ঞাকে একটি ছোট সংখ্যাগত convexity-পরীক্ষকে পরিণত করা যাক। দুটি পরীক্ষা: (১) ২০০০টি এলোমেলো জ্যা, বাক্স [−৩, ৩]²-এর ভেতরে; কতবার জ্যার নিচে লেখচিত্র নামে নয়, ওপরে ওঠে, আর সবচেয়ে বড় লঙ্ঘন কত। (২) ১১ × ১১ grid-এ finite difference দিয়ে Hessian বানিয়ে তার সবচেয়ে ছোট eigenvalue. পাঁচটি function: squared loss, log loss আর hinge (বাজারঘরের ৪০টি কাল্পনিক অর্ডারে, দুটি ওজন), quartic (w1² − 1)² + w2², আর ৩০টি এক-মাত্রার মানে দুটি কেন্দ্রের k-means objective.

import numpy as np

rng = np.random.default_rng(42)
X = rng.normal(size=(40, 2))                 # কাল্পনিক বাজারঘর: ৪০টি অর্ডার, ২টি feature
y = (X @ [1.5, -1.0] + rng.normal(0, 0.8, 40) > 0).astype(float)   # ফেরত হয়েছে কি না
pts = np.r_[rng.normal(-1.5, 0.5, 15), rng.normal(1.5, 0.5, 15)]  # k-means: ১-D ৩০টি মান

losses = {
    "squared":  lambda w: np.mean((X @ w - y) ** 2),
    "log loss": lambda w: np.mean(np.logaddexp(0, X @ w) - y * (X @ w)),
    "hinge":    lambda w: np.mean(np.maximum(0, 1 - (2*y - 1) * (X @ w))),
    "quartic":  lambda w: (w[0]**2 - 1)**2 + w[1]**2,
    "k-means":  lambda c: np.mean(np.min((pts[:, None] - c) ** 2, axis=1)),
}

def chord_test(f, n=2000, box=3.0):            # সংজ্ঞা: f(ta+(1-t)b) <= t f(a)+(1-t) f(b)?
    a, b = rng.uniform(-box, box, (2, n, 2))
    t = rng.uniform(0, 1, n)
    gap = [f(ti*ai + (1-ti)*bi) - ti*f(ai) - (1-ti)*f(bi) for ai, bi, ti in zip(a, b, t)]
    return np.sum(np.array(gap) > 1e-9), max(gap)

def hessian_test(f, h=1e-3):                   # ১১ × ১১ grid-এ finite-difference Hessian
    E, worst = np.eye(2) * h, np.inf
    for u in np.linspace(-2.5, 2.5, 11):
        for v in np.linspace(-2.5, 2.5, 11):
            p = np.array([u, v])
            H = [[(f(p+E[i]+E[j]) - f(p+E[i]-E[j]) - f(p-E[i]+E[j]) + f(p-E[i]-E[j]))
                  / (4*h*h) for j in range(2)] for i in range(2)]
            worst = min(worst, np.linalg.eigvalsh(np.array(H)).min())
    return worst

print("loss      chord fails  worst gap   min Hessian eig")
for name, f in losses.items():
    bad, gap = chord_test(f)
    print(f"{name:9} {bad:5d}/2000  {gap:9.4f}   {hessian_test(f):10.4f}")

আসল আউটপুট (ব্রাউজারের Python):

loss      chord fails  worst gap   min Hessian eig
squared       0/2000    -0.0001       0.8638
log loss      0/2000    -0.0000       0.0194
hinge         0/2000     0.0000      -0.0000
quartic      70/2000     0.7612      -4.0000
k-means     526/2000     2.4028   -5071.2636

প্রথম তিনটি convex loss-এ একটি জ্যাও ভাঙেনি, আর “worst gap” শূন্য বা ঋণাত্মক (জ্যা সবসময় ওপরে)। Squared loss-এর Hessian সব জায়গায় একই, সবচেয়ে ছোট eigenvalue ০.৮৬৩৮. Log loss-এর ০.০১৯৪: ধনাত্মক কিন্তু ছোট, কারণ grid-এর কোণে, বড় w-এ p(1 − p) প্রায় শূন্য, বাটি সেখানে প্রায় সমতল। Hinge-এর −০.০০০০ আসলে শূন্য, শুধু float-এর rounding-এ একটি অতি ছোট ঋণাত্মক সংখ্যা: hinge টুকরো টুকরো সরলরেখা, তাই প্রায় সব জায়গায় Hessian শূন্য, আর ভাঁজে সংজ্ঞাই নেই। এখানে দ্বিতীয় ক্রমের পরীক্ষা দুর্বল, জ্যা-পরীক্ষাই নির্ভরযোগ্য। Quartic-এ মাত্র ৭০টি জ্যা (৩.৫%) ভেঙেছে, অথচ Hessian-এর −৪.০০০০ (w1 = ০-তে 12w1² − 4) স্পষ্ট প্রমাণ দেয়। এলোমেলো পরীক্ষা খাঁজটি সহজে মিস করতে পারত। k-means-এ ৫২৬টি জ্যা ভেঙেছে, আর Hessian-এর −৫০৭১: “কাছের কেন্দ্র” যেখানে বদলায়, সেখানে লেখচিত্রে একটি উল্টো ভাঁজ (চূড়ার মতো), যার দ্বিতীয় derivative-কে finite difference বিশাল ঋণাত্মক সংখ্যা হিসেবে দেখে। শিক্ষা: সংখ্যাগত পরীক্ষক non-convexity ধরতে পারে, convexity প্রমাণ করতে পারে না; প্রমাণের জন্য লাগে পরের অংশের নিয়ম।

৬ · Convexity রক্ষা করে যে অপারেশন — ছোট টুকরো থেকে প্রমাণ

বাস্তবে কেউ জ্যা বা Hessian দিয়ে প্রতিটি loss-এর convexity প্রমাণ করে না। বরং কয়েকটি পরিচিত convex টুকরো নিয়ে, convexity রক্ষা করে এমন নিয়মে জোড়া লাগানো হয়। Boyd ও Vandenberghe-এর Convex Optimization (২০০৪) বইয়ের অধ্যায় ৩ এই নিয়মগুলোর মানসম্মত তালিকা দেয়:

অঋণাত্মক ওজনে যোগ

f, g convex আর α, β ≥ ০ হলে αf + βg convex. ডেটার সারি ধরে loss-এর গড়, আর loss + λ·শাস্তি, দুটিই এমন।

Affine চলক বদল

f convex হলে f(Aw + b) convex. প্রতিটি সারির loss ℓ(y, xᵀw) এভাবেই w-এ convex হয়। Affine function নিজে একসঙ্গে convex আর concave.

Pointwise সর্বোচ্চ

কয়েকটি convex function-এর সর্বোচ্চ convex. Hinge = max(0, 1 − y·xᵀw), |w| = max(w, −w), ReLU = max(0, z) এই নিয়মেই convex হয়।

Composition, শর্তসহ

g convex আর অ-হ্রাসমান, f convex হলে g(f(w)) convex. যেমন ef, বা max(0, f)². শর্ত ছাড়া এটি মিথ্যা।

সতর্ক থাকুন: দুটি convex function-এর গুণফল বা সর্বনিম্ন সাধারণত convex নয়। k-means-এর min, আর neural network-এর ওজনের গুণ (W2·ReLU(W1x)) ঠিক এই দুই জায়গায় convexity হারায়। নিচের stepper এই নিয়মে L2-সহ logistic loss-এর convexity ধাপে ধাপে প্রমাণ করে, তারপর composition-এর ফাঁদটি দেখায়।

L(w) = (1/n)·Σ log(1 + e^(−y·xᵀw)) + (λ/2)‖w‖²y ∈ {−1, +1}

            
  1. এক চলকের টুকরো। ℓ(u) = log(1 + eu)-এর দ্বিতীয় derivative σ(u)(1 − σ(u)): u = ০-তে ০.২৫, u = ৪-এ ০.০১৭৭, কখনো ঋণাত্মক নয়। তাই ℓ convex.
  2. Affine চলক বদল। ui = −yixiᵀw হলো w-এর affine function. Convex-এর ভেতরে affine বসালে convex থাকে, তাই প্রতিটি সারির loss w-এ convex.
  3. গড়। n-টি convex function-এর ১/n ওজনে যোগ convex. Hessian XᵀSX/n, যার ঘর S = diag(σ(1 − σ)) অঋণাত্মক, তাই PSD. (এটি পর্ব ১১-এর logistic Hessian, এখানে ±1 label-এর রূপে।)
  4. L2 শাস্তি। (λ/2)‖w‖²-এর Hessian λI. যোগ করলে মোট Hessian কমপক্ষে λI = ০.১I, অর্থাৎ loss λ-strongly convex, আর সর্বনিম্ন বিন্দু ঠিক একটি। অংশ ৪-এর run-এ ২০টি শুরুর একটিই শেষবিন্দু এর ফল।
  5. ফাঁদ। f(w) = w² − 1 আর g(u) = u² দুটিই convex, কিন্তু g(f(w)) = (w² − 1)² হলো double well. g ঋণাত্মক u-তে হ্রাসমান, তাই composition-এর শর্ত ভাঙে। AI-এর লেখা “convex-এর convex, তাই convex” যুক্তিতে এই শর্তটি প্রায়ই বাদ পড়ে।

৭ · Strong convexity, smoothness আর condition number κ

Convexity বলে “আটকে যাবেন না”, কিন্তু বলে না “কত দ্রুত পৌঁছাবেন”। গতির হিসাবের জন্য দুটি সংখ্যাগত মাপ লাগে, বাটির সবচেয়ে চ্যাপ্টা দিক আর সবচেয়ে খাড়া দিক।

দুটি সীমা, একটি অনুপাত

μ-strongly convex (μ > ০): f(y) ≥ f(x) + ∇f(x)ᵀ(y − x) + (μ/2)‖y − x‖². স্পর্শকের ওপরে অন্তত একটি quadratic বাটি; দুবার differentiable হলে ∇²f ⪰ μI, অর্থাৎ Hessian-এর সবচেয়ে ছোট eigenvalue সব জায়গায় অন্তত μ.

L-smooth: ‖∇f(x) − ∇f(y)‖ ≤ L‖x − y‖, অর্থাৎ ঢাল খুব হঠাৎ বদলায় না; convex আর দুবার differentiable হলে এটি ∇²f ⪯ LI-এর সমান, আর তখন f(y) ≤ f(x) + ∇f(x)ᵀ(y − x) + (L/2)‖y − x‖². L হলো Hessian-এর সবচেয়ে বড় eigenvalue-এর ঊর্ধ্বসীমা।

Condition number κ = L/μ ≥ ১. Quadratic f(w) = ½wᵀHw-এ μ আর L হুবহু H-এর সবচেয়ে ছোট আর বড় eigenvalue, আর κ হলো H-এর condition number.

এদের মানে বাটির আকারে ভাবুন। κ = ১ মানে গোল বাটি: সব দিকে সমান খাড়া, gradient সোজা তলার দিকে দেখায়। κ = ১০০০ মানে একটি লম্বা সরু নালার মতো উপত্যকা: আড়াআড়ি দিকে খুব খাড়া, লম্বালম্বি দিকে প্রায় সমতল। Gradient descent-এর ধাপ η খাড়া দিকের কারণে ছোট রাখতে হয় (পর্ব ১৩ দেখাবে, quadratic-এ η < 2/L না হলে ধাপ লাফিয়ে বাইরে যায়), কিন্তু সেই ছোট ধাপে চ্যাপ্টা দিকে এগোতে বহু সময় লাগে। মোটা দাগে, μ-strongly convex আর L-smooth f-এ η = 1/L দিয়ে gradient descent প্রতি ধাপে f(w) − f* -এর ব্যবধানকে অন্তত (1 − μ/L) গুণে কমায়; তাই নির্দিষ্ট নির্ভুলতায় পৌঁছাতে মোটামুটি κ-এর অনুপাতে ধাপ লাগে। পুরো প্রমাণ, zig-zag পথের ছবি আর learning-rate-এর পছন্দ পর্ব ১৩-এর বিষয়।

Strong convexity কোথা থেকে আসে? Least squares-এ μ হলো XᵀX/n-এর সবচেয়ে ছোট eigenvalue, যা কলাম প্রায় নির্ভরশীল হলে শূন্যের কাছে। Ridge বা L2 শাস্তি সরাসরি μ-তে λ যোগ করে। আর শুধু log loss (শাস্তি ছাড়া) strongly convex নয়: w বড় হলে p(1 − p) শূন্যের দিকে যায় (অংশ ৫-এর পরীক্ষকে ০.০১৯৪), আর separable ডেটায় সর্বনিম্ন বিন্দুই নেই। L2 যোগ করলেই সমস্যাটি সুসংজ্ঞায়িত হয়; scikit-learn-এর LogisticRegression default-এ L2 শাস্তি (C = 1.0) রাখে, যার একটি কারণ এটি। কোন সংখ্যা দিয়ে μ আর L মাপবেন, আর feature-এর একক κ-কে কতটা বদলায়, তা অংশ ৮-এর শেষের ব্লক একটি কাল্পনিক regression-এ দেখায়।

৮ · Jensen-এর অসমতা — গড়ের function বনাম function-এর গড়

জ্যার সংজ্ঞায় দুটি বিন্দু আর দুটি ওজন t ও 1 − t. বিন্দু বেশি হলে, বা ওজনগুলো একটি সম্ভাবনা বণ্টন হলে, একই কথার নাম Jensen-এর অসমতা; ডেনমার্কের গণিতবিদ Johan Jensen ১৯০৬ সালে এটি সাধারণ রূপে প্রকাশ করেন। convex f আর যেকোনো random variable X-এর জন্য (প্রত্যাশিত মান থাকলে):

f(E[X]) ≤ E[f(X)], আর concave f-এ উল্টো: E[log X] ≤ log E[X]

বাজারঘরের একজন বিক্রেতা প্রতিদিন রিকশায় পণ্য পাঠান। ভাড়া দূরত্বের বর্গের মতো বাড়ে (একটি convex সম্পর্ক ধরুন)। কোনো দিন ২ km, কোনো দিন ৮ km, গড়ে ৫ km. “গড় দূরত্বের ভাড়া” হিসাব করলে খরচ কম দেখাবে: ৫² = ২৫, অথচ আসল গড় ভাড়া (২² + ৮²)/২ = ৩৪. Convex খরচে অনিশ্চয়তা সবসময় খরচ বাড়ায়, আর Jensen সেই বাড়তির দিক নিশ্চিত করে।

ML-এ Jensen অন্তত তিন জায়গায় সরাসরি কাজ করে। (১) Ensemble: loss অনুমানে convex হলে (squared error, log loss), কয়েকটি model-এর অনুমানের গড়ের loss তাদের নিজ নিজ loss-এর গড়ের চেয়ে বেশি হয় না। এটি পর্ব ৩৭ (Stacking, blending আর voting — ensemble কখন সত্যিই সাহায্য করে)-এর একটি তাত্ত্বিক ভিত্তি। (২) KL divergence ≥ ০: −log concave নয়, convex; Jensen দিয়ে KL(p‖q) = Ep[−log(q/p)] ≥ −log Ep[q/p] = −log ১ = ০. AI-এর ভিত্তি কোর্সের পর্ব ৩৮-এ ফলটি দেখেছেন, এখানে তার প্রমাণ। (৩) নিচের সীমা: EM algorithm আর variational inference-এ log-likelihood-এর একটি নিচের সীমা Jensen দিয়েই বানানো হয়; এটি পর্ব ৩৯ (Gaussian mixture আর EM algorithm — নরম clustering) আর পর্ব ৪৮ (Variational inference-এর ধারণা — ELBO আর approximation)-এ আসবে।

নিচের ব্লক দুটি কাজ করে। প্রথমে ২০০ জন কাল্পনিক গ্রাহকের কাঁচা feature (অর্ডারের সংখ্যা আর ঝুড়ির আকার, শত টাকায়) দিয়ে least squares loss f(w) = ‖Xw − y‖²/(2n)-এর Hessian XᵀX/n থেকে μ, L আর κ বের করে, তারপর ১০০০টি এলোমেলো বিন্দু-জোড়ায় অংশ ৭-এর দুই সীমা মিলিয়ে দেখে, আর standardize করার পর κ কত হয় তা ছাপে। তারপর ১০,০০০টি কাল্পনিক অর্ডারের মূল্যে Jensen-এর দুই দিক যাচাই করে।

import numpy as np

rng = np.random.default_rng(42)
np.set_printoptions(suppress=True)
n = 200                                          # কাল্পনিক বাজারঘর: ২০০ জন গ্রাহক
orders = rng.poisson(6, n).astype(float)         # গত ৬ মাসে অর্ডার
basket = rng.normal(9, 2.5, n)                   # গড় ঝুড়ি, শত টাকায়
X = np.column_stack([np.ones(n), orders, basket])
y = 3 + 1.2 * orders + 0.45 * basket + rng.normal(0, 1.5, n)

f = lambda w: np.sum((X @ w - y) ** 2) / (2 * n)     # quadratic loss
g = lambda w: X.T @ (X @ w - y) / n
ev = np.linalg.eigvalsh(X.T @ X / n)                 # Hessian সব w-এ একই
mu, L = ev[0], ev[-1]
print("Hessian eigenvalues:", np.round(ev, 4))
print(f"mu = {mu:.4f}   L = {L:.2f}   kappa = L/mu = {L / mu:.0f}")

held_mu = held_L = 0
for _ in range(1000):                                # দুই দিকের সীমা এলোমেলো জোড়ায়
    a, b = rng.normal(0, 3, (2, 3))
    lin, d2 = f(a) + g(a) @ (b - a), (b - a) @ (b - a)
    held_mu += f(b) >= lin + mu / 2 * d2 - 1e-9
    held_L += f(b) <= lin + L / 2 * d2 + 1e-9
print(f"lower bound (mu) held {held_mu}/1000, upper bound (L) held {held_L}/1000")

Z = (X[:, 1:] - X[:, 1:].mean(0)) / X[:, 1:].std(0)  # standardize করলে?
Xs = np.column_stack([np.ones(n), Z])
ev_s = np.linalg.eigvalsh(Xs.T @ Xs / n)
print(f"after standardizing: kappa = {ev_s[-1] / ev_s[0]:.2f}")

v = rng.lognormal(np.log(900), 0.6, 10_000)          # অর্ডারের মূল্য, টাকা
print(f"Jensen, f=x^2 : E[f(V)] = {np.mean(v**2):,.0f} >= f(E[V]) = {np.mean(v)**2:,.0f}")
print(f"Jensen, f=log : E[log V] = {np.mean(np.log(v)):.4f} <= log E[V] = {np.log(np.mean(v)):.4f}")

আসল আউটপুট (ব্রাউজারের Python):

Hessian eigenvalues: [  0.0588   5.4873 123.7122]
mu = 0.0588   L = 123.71   kappa = L/mu = 2103
lower bound (mu) held 1000/1000, upper bound (L) held 1000/1000
after standardizing: kappa = 1.26
Jensen, f=x^2 : E[f(V)] = 1,690,966 >= f(E[V]) = 1,172,901
Jensen, f=log : E[log V] = 6.8054 <= log E[V] = 6.9875

Hessian-এর তিনটি eigenvalue ০.০৫৮৮, ৫.৪৮৭৩ আর ১২৩.৭১২২; তাই μ = ০.০৫৮৮, L = ১২৩.৭১, κ ≈ ২১০৩. সব-১ কলাম, অর্ডারের সংখ্যা (গড় ৬) আর ঝুড়ি (গড় ৯) তিনটিই গড় থেকে দূরে আর একে অপরের সঙ্গে প্রায় সমান্তরাল, তাই একটি দিকে বাটি খুব চ্যাপ্টা। ১০০০টি জোড়ার সবকটিতে দুই সীমা টিকেছে; quadratic-এ এটি নিশ্চিত, কারণ Taylor approximation সেখানে হুবহু আর ½dᵀHd সবসময় ½μ‖d‖² আর ½L‖d‖²-এর মাঝে থাকে, তাই এটি সূত্রের একটি sanity check. Feature standardize করার পর κ নেমে এসেছে ১.২৬-এ: একই তথ্য, একই model, কিন্তু বাটি প্রায় গোল। Gradient descent-এ এর মানে কী, পর্ব ১৩ সংখ্যা দিয়ে দেখাবে। Jensen-এর দুটি লাইনে: x²-এর গড় (১৬,৯০,৯৬৬) গড়ের বর্গের (১১,৭২,৯০১) চেয়ে বড়, আর ফারাকটি ঠিক variance. log-এর গড় ৬.৮০৫৪, গড়ের log ৬.৯৮৭৫; concave function-এ দিক উল্টো। Lognormal বণ্টনে তত্ত্ব অনুযায়ী এই ফারাক σ²/2 = ০.১৮, আর এখানে পাওয়া ০.১৮২১ তার কাছেই।

আরও গভীরে: Strongly convex আর L-smooth f-এর জন্য gradient descent-এর হার (1 − 1/κ)-এর মতো, আর Nesterov ১৯৮৩ সালে দেখান যে momentum দিয়ে √κ-এর হারে নামা যায়; তাঁর Introductory Lectures on Convex Optimization (২০০৪) বইয়ে আছে, শুধু gradient দেখে এমন পদ্ধতির পক্ষে এর চেয়ে ভালো করা সাধারণভাবে সম্ভব নয় (একে lower bound বলে)। ভাঁজওয়ালা convex f-এ gradient-এর জায়গায় বসে subgradient, আর তখন গতি কমে যায়; lasso-র জন্য proximal পদ্ধতি এই সমস্যা এড়ায় (পর্ব ১৭)। পূর্ণ তত্ত্বের মানসম্মত বই Boyd ও Vandenberghe (২০০৪, লেখকদের ওয়েবসাইটে বিনামূল্যে), আর আরও পুরোনো ভিত্তি Rockafellar-এর Convex Analysis (১৯৭০)।

৯ · Non-convex জগতে কী করা হয়

Convex model সুন্দর, কিন্তু সব সমস্যা convex নয়। Non-convex সমস্যায় ব্যবহারিক কৌশলগুলো চারটি ভাগে পড়ে, আর প্রত্যেকটির সীমাও আছে।

  • বহু শুরু আর ভালো শুরু: অংশ ৪-এর মতো কয়েকবার চালিয়ে সবচেয়ে কম loss নেওয়া। k-means-এ k-means++ (Arthur ও Vassilvitskii, ২০০৭) শুরুর কেন্দ্র এমনভাবে বাছে যে প্রত্যাশিত objective সর্বোত্তমের O(log k) গুণের মধ্যে থাকে। AI-এর ভিত্তি কোর্সের পর্ব ৬৫-এ k-means চালিয়েছেন।
  • পর্যায়ক্রমে convex অংশ: k-means-এ কেন্দ্র স্থির রাখলে বিন্দু ভাগ করা সহজ, ভাগ স্থির রাখলে কেন্দ্র (গড়) একটি convex সমস্যার সমাধান। Lloyd-এর পদ্ধতি, EM আর matrix factorization-এর alternating least squares এভাবেই চলে; প্রতি ধাপে loss বাড়ে না, কিন্তু global minimum-এর নিশ্চয়তা নেই।
  • Convex relaxation: কঠিন শর্তকে কাছাকাছি একটি convex শর্তে বদলানো। সবচেয়ে বিখ্যাত উদাহরণ: “কয়টি ওজন অশূন্য” (L0) গোনা non-convex, তার জায়গায় ‖w‖1 নিলে lasso, যা convex. 0-1 loss-এর জায়গায় hinge বা log loss বসানোও একই ভাবনা, যাকে পর্ব ০২-এ surrogate loss বলা হয়েছে।
  • Neural network-এ অভিজ্ঞতার ওপর ভরসা: ভালো initialization, SGD-এর noise, momentum আর অনেক বেশি parameter মিলে বাস্তবে সাধারণত ভালো সমাধান মেলে। কিন্তু এটি পর্যবেক্ষণ আর আংশিক তত্ত্ব, convex-এর মতো সাধারণ নিশ্চয়তা নয় (প্রশ্ন ০২)।

পরীক্ষা ও ইন্টারভিউতে: (১) Convex function-এর সংজ্ঞা লিখুন। f(ta + (1 − t)b) ≤ tf(a) + (1 − t)f(b), সব a, b আর t ∈ [০, ১]-এ। (২) প্রমাণ করুন convex f-এর local minimum global. বিরোধ: নিচু y থাকলে x* থেকে y-এর রেখায় x*-এর যত কাছে খুশি নিচু বিন্দু (অংশ ৪)। (৩) Logistic loss convex কেন? Hessian XᵀSX, S-এর ঘর p(1 − p) ≥ ০, তাই PSD. (৪) Neural network-এর loss convex নয় কেন? Hidden unit অদলবদলে একই loss; দুটি সমান সমাধানের গড় খারাপ, তাই জ্যার শর্ত ভাঙে। (৫) H = diag(১, ১০০)-এ κ আর নিরাপদ η? κ = ১০০, η < 2/L = ০.০২.

১০ · AI-এর যুগে — convexity-র দাবি আর optimizer-এর পরামর্শ যাচাই

AI assistant “এই loss convex, তাই যেকোনো optimizer চলবে” ধরনের কথা আত্মবিশ্বাসের সঙ্গে বলে। প্রায়ই কথাটি অর্ধেক সত্য: loss অনুমানে convex, কিন্তু parameter-এ নয়; বা composition-এর শর্ত বাদ পড়েছে। নিচের ছকে সাধারণ ভুল আর ধরার উপায়।

AI প্রায়ই যা বলেকেন ভুলকীভাবে ধরবেন
“MSE convex, তাই neural network-এর training convex”Convexity অনুমানে, parameter-এ নয়Parameter-এর সাপেক্ষে প্রশ্ন করুন; দুটি seed-এর সমাধানের মাঝের বিন্দুতে loss দেখুন
“Convex-এর convex, তাই convex”বাইরের function অ-হ্রাসমান হওয়া লাগে; (w² − 1)² তার উল্টো উদাহরণঅংশ ৬-এর চারটি নিয়ম মিলিয়ে নিন; জ্যা-পরীক্ষক চালান
“k-means সবসময় সেরা ভাগ দেয়”Non-convex, শুধু local minimum নিশ্চিতকয়েকটি seed-এ objective (inertia) তুলনা করুন
“Convex, তাই learning rate যা খুশি”η বড় হলে convex quadratic-এও ধাপ বাইরে লাফায়Hessian-এর বড় eigenvalue L দেখুন; loss প্রতি ধাপে কমছে কি না দেখুন
Logistic loss-কে সবসময় strongly convex বলেশাস্তি ছাড়া নয়; separable ডেটায় সর্বনিম্ন বিন্দুই নেইশাস্তি (C) কত তা দেখুন; ওজন ক্রমাগত বাড়ছে কি না দেখুন
একটি বিন্দুতে Hessian PSD দেখে convex বলে দেয়Convexity সার্বিক দাবি; সেটি শুধু স্থানীয় আকারঅনেক বিন্দুতে (বা প্রমাণে) সব x-এর জন্য দেখান

AI-কে শুধু “convex কি না” নয়, প্রমাণ, শর্ত আর পরীক্ষাও চাইতে বলুন:

আমার loss: L(w) = (1/n) Σ max(0, 1 − y_i x_iᵀw)² + λ‖w‖₁, যেখানে y_i ∈ {−1, +1}. ১. L কি w-এ convex? শুধু হ্যাঁ/না নয়: কোন টুকরো convex আর কোন নিয়মে জোড়া লেগেছে (যোগ, affine, max, composition-এর শর্ত) তা ধাপে ধাপে দেখাও। ২. L কি strongly convex? μ সম্পর্কে কী বলা যায়, λ = 0 হলে কী বদলায়? ৩. কোথায় L differentiable নয়, আর সেখানে কোন subgradient নেব? ৪. NumPy-তে (seed দিয়ে) একটি জ্যা-পরীক্ষা লেখো, ২০০০টি এলোমেলো জোড়ায়। ৫. তোমার যুক্তির কোন ধাপে ভুলের ঝুঁকি সবচেয়ে বেশি, সেটিও বলো।

AI-এর দেওয়া convexity-র দাবি হাতে পেলে — যাচাইয়ের চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।

প্র ০১Optimization-এ “সহজ” আর “কঠিন”-এর সীমারেখা linear বনাম nonlinear নয়, convex বনাম non-convex — এই কথার মানে কী?

বিংশ শতকের মাঝামাঝি optimization-এর বড় সাফল্য ছিল linear programming: George Dantzig ১৯৪৭ সালের দিকে simplex পদ্ধতি দেন, আর পরিবহন, উৎপাদন আর সামরিক পরিকল্পনায় তা ব্যাপকভাবে ব্যবহৃত হয়। তাই অনেক দিন ধারণা ছিল, linear সমস্যা সহজ আর nonlinear কঠিন। কিন্তু ধীরে ধীরে দেখা গেল, এই ভাগ ভুল জায়গায়। Least squares nonlinear (quadratic), তবু উনিশ শতক থেকে সমাধানযোগ্য; আবার integer-শর্তযুক্ত linear সমস্যা (যেমন বহু scheduling) সাধারণভাবে NP-hard.

R. Tyrrell Rockafellar ১৯৯৩ সালে SIAM Review-এর একটি প্রবন্ধে কথাটি প্রায় এভাবে বলেন: optimization-এর বড় বিভাজন linearity আর nonlinearity-র মধ্যে নয়, convexity আর nonconvexity-র মধ্যে। উদ্ধৃতির হুবহু শব্দ উৎসভেদে সামান্য আলাদা পাওয়া যায়, কিন্তু ভাবটি সর্বজনস্বীকৃত। কারণ convex সমস্যার তিনটি গুণ: local তথ্যই global উত্তর দেয়; সর্বনিম্নতার সার্টিফিকেট আছে (duality, KKT শর্ত, পর্ব ১৬); আর polynomial সময়ের সাধারণ algorithm আছে। Narendra Karmarkar ১৯৮৪ সালে linear programming-এর জন্য একটি interior-point পদ্ধতি দেন, আর Nesterov ও Nemirovskii ১৯৯৪ সালের বইয়ে দেখান যে এই ধাঁচ বহু ধরনের convex সমস্যায় খাটে।

ML-এর ইতিহাসেও এর ছাপ আছে। ১৯৯০-এর দশকের শেষ থেকে ২০০০-এর দশকে SVM (Cortes ও Vapnik, ১৯৯৫), lasso (Tibshirani, ১৯৯৬) আর regularized logistic regression জনপ্রিয় হয়েছিল অংশত এজন্য যে এগুলো convex: ফল পুনরুৎপাদনযোগ্য, initialization-এর ওপর নির্ভর করে না, আর তত্ত্ব পরিষ্কার। পরে deep learning-এর সাফল্য দেখাল, non-convex model-ও বাস্তবে খুব ভালো কাজ করতে পারে, যদিও নিশ্চয়তা দুর্বল।

ব্যবহারিক শিক্ষা: নতুন সমস্যা পেলে প্রথম প্রশ্ন হওয়া উচিত “এটি কি convex, বা convex আকারে লেখা যায়?” উত্তর হ্যাঁ হলে পরিপক্ব solver আর নিশ্চয়তা পাবেন; না হলে বহু শুরু, relaxation বা অভিজ্ঞতানির্ভর কৌশল লাগবে।

মূল উপলব্ধি: সমস্যার কঠিনতা নির্ধারণ করে তার আকৃতি (বাটি কি না), সূত্রের ধরন (linear কি না) নয়।

প্র ০২Neural network-এর loss non-convex হলে তবু gradient descent দিয়ে training এত ভালো কাজ করে কেন? আমরা আসলে কতটুকু জানি?

প্রথমে সতর্কতা: এই প্রশ্নের পূর্ণ তাত্ত্বিক উত্তর এখনো নেই, আর গবেষকদের মধ্যে ব্যাখ্যা নিয়ে মতভেদ আছে। তাত্ত্বিকভাবে neural network training কঠিন হতে পারে: Blum ও Rivest ১৯৯২ সালে দেখান যে একটি খুব ছোট (তিন neuron-এর) network-কেও নির্দিষ্ট ডেটায় নিখুঁতভাবে fit করা NP-complete. অর্থাৎ সবচেয়ে খারাপ ক্ষেত্রে কোনো দ্রুত পদ্ধতির নিশ্চয়তা আশা করা যায় না।

তবু বাস্তবে কয়েকটি পর্যবেক্ষণ সাহায্য করে। (১) Saddle বেশি, খারাপ minimum কম: Dauphin ও সহকর্মীরা ২০১৪ সালে যুক্তি দেন যে উচ্চ মাত্রায় ঢাল শূন্যের বেশির ভাগ বিন্দু saddle point, local minimum নয়, কারণ লাখো দিকের সবকটিতে ওপরে ওঠা একটি বিরল ঘটনা। Saddle থেকে SGD-এর noise সাধারণত বের করে আনে। (২) অনেক minimum প্রায় সমান ভালো: Choromanska ও সহকর্মীরা (২০১৫) একটি সরলীকৃত মডেলে দেখান বড় network-এ local minimum-গুলোর loss একটি সরু ব্যবধিতে জমা হয়; তবে মডেলটির অনুমান বাস্তবে কতটা খাটে তা বিতর্কিত। (৩) অনেক বেশি parameter: খুব চওড়া network-এ ছোট ধাপের gradient descent প্রায় একটি convex-এর মতো আচরণ করে, এমন কিছু তাত্ত্বিক ফল আছে (যেমন neural tangent kernel-এর ধারণা), কিন্তু সেগুলো বাস্তব আকারের network-এ পুরোপুরি খাটে না।

অংশ ৫-এর প্রতিসাম্যের কথাও মনে রাখুন: একটি hidden layer-এ ১০০টি neuron থাকলে তাদের ক্রম অদলবদলে ১০০!-টি সমান ভালো সমাধান। এদের বেশির ভাগ “আলাদা” minimum আসলে একই function, তাই কোনটিতে পৌঁছালেন তাতে কিছু আসে যায় না।

ব্যবহারিক মানে: non-convex model-এ seed বদলালে ফল বদলায়, তাই কয়েকটি seed-এ চালিয়ে গড় আর ছড়ানো জানাতে হয় (পর্ব ০৪-এর পরীক্ষার নিয়ম)। আর একটি run-এর loss দেখে “এটিই সেরা” বলা যায় না।

মূল উপলব্ধি: deep learning-এর সাফল্য convexity-র তত্ত্বকে মিথ্যা প্রমাণ করে না; এটি দেখায় যে সবচেয়ে খারাপ ক্ষেত্র আর সাধারণ বাস্তব ক্ষেত্র আলাদা, আর সেই ফাঁকের ব্যাখ্যা এখনো গবেষণার বিষয়।

প্র ০৩শাস্তি ছাড়া logistic regression convex, তবু কখনো কখনো তার ওজন অসীমের দিকে ছোটে। এটি কীভাবে সম্ভব, আর L2 কী সমাধান দেয়?

Convexity বলে “local minimum থাকলে সেটিই global”; বলে না যে minimum থাকবেই। Log loss L(w) = ∑ log(1 + e−yixiᵀw) প্রতিটি পদ ধনাত্মক, তাই L > ০. এখন ধরুন ডেটা linearly separable: এমন একটি w0 আছে যাতে সব i-তে yixiᵀw0 > ০. তাহলে w = c·w0 নিয়ে c বাড়ালে প্রতিটি পদের সূচক −∞-এর দিকে যায়, প্রতিটি পদ শূন্যের দিকে, আর L শূন্যের দিকে নামে, কিন্তু কোনো সসীম w-এ শূন্য হয় না। Infimum আছে, minimum নেই; অংশ ৪-এর ew-এর মতোই।

বাস্তবে এর লক্ষণ: gradient descent চলতেই থাকে, ওজনের দৈর্ঘ্য ধীরে ধীরে (মোটামুটি log-এর হারে) বাড়ে, আর Newton-এর পদ্ধতিতে Hessian XᵀSX প্রায় singular হয়ে যায়, কারণ সব p(1 − p) শূন্যের দিকে। পরিসংখ্যানের সফটওয়্যার এ অবস্থায় “perfect separation” সতর্কবার্তা দেয়, আর coefficient-এর standard error বিশাল দেখায়। মজার তাত্ত্বিক ফল: Soudry ও সহকর্মীরা (২০১৮) দেখান, separable ডেটায় gradient descent-এর ওজনের দিক ধীরে ধীরে hard-margin SVM-এর দিকে যায় (পর্ব ২৭); অর্থাৎ শাস্তি না থাকলেও algorithm নিজে একটি পছন্দ চাপিয়ে দেয়, যাকে implicit bias বলে।

L2 শাস্তি (λ/2)‖w‖² যোগ করলে ছবি পুরো বদলে যায়। ‖w‖ বাড়লে শাস্তি অসীমের দিকে যায়, তাই minimum একটি সসীম জায়গায় থাকতেই হবে; আর Hessian ⪰ λI, তাই loss λ-strongly convex আর minimum ঠিক একটি, যা অংশ ৬-এর stepper দেখিয়েছে। κ-ও সীমিত হয়, কারণ μ ≥ λ. scikit-learn-এর LogisticRegression-এ default শাস্তি L2 আর C = 1.0, যেখানে C হলো শাস্তির শক্তির উল্টো; তাই বেশির ভাগ ব্যবহারকারী না জেনেই এই সুরক্ষা পান।

দাম কী? শাস্তি coefficient-গুলোকে শূন্যের দিকে টানে, তাই probability-গুলো কিছুটা কম চরম হয়। C বাছতে হয় cross-validation-এ, test set ছুঁয়ে নয়; পূর্ণ regularization path আসবে পর্ব ২৩-এ।

মূল উপলব্ধি: convexity “আটকে যাবেন না” নিশ্চিত করে, কিন্তু “পৌঁছানোর জায়গা আছে” নিশ্চিত করতে লাগে strong convexity বা অন্য কোনো শর্ত, আর L2 সবচেয়ে সস্তা উপায়।

প্র ০৪k-means non-convex হওয়ায় বাস্তবে কী সমস্যা হয়, আর scikit-learn-এর default সেটিং কীভাবে তার মোকাবিলা করে?

k-means-এর objective হলো প্রতিটি বিন্দু থেকে তার সবচেয়ে কাছের কেন্দ্রের দূরত্বের বর্গের যোগফল। “সবচেয়ে কাছের” মানে একটি min, আর কয়েকটি convex function-এর min সাধারণত convex নয়; অংশ ৫-এর পরীক্ষকে ২০০০টির মধ্যে ৫২৬টি জ্যা ভেঙেছে। প্রতিসাম্যও আছে: কেন্দ্রগুলোর নাম অদলবদল করলে একই objective, কিন্তু মাঝখানের বিন্দু খারাপ।

কঠিনতা শুধু আকৃতির নয়, গণনারও: সাধারণ মাত্রায় এবং সাধারণ k-তে সর্বোত্তম k-means সমাধান খোঁজা NP-hard বলে প্রমাণিত (২০০৯ সালের দিকে কয়েকটি স্বাধীন প্রবন্ধ, যেমন Aloise ও সহকর্মী, আর Mahajan ও সহকর্মী, ভিন্ন ভিন্ন সংস্করণে)। তাই প্রচলিত Lloyd-এর পদ্ধতি (Stuart Lloyd-এর ১৯৫৭ সালের অভ্যন্তরীণ প্রতিবেদন, প্রকাশিত ১৯৮২) একটি local search: পর্যায়ক্রমে “বিন্দু ভাগ” আর “কেন্দ্র গড়”। প্রতি ধাপে objective বাড়ে না, আর সসীম ধাপে থামে, কিন্তু থামার জায়গা শুরুর ওপর নির্ভর করে। একটি খারাপ শুরুতে দুটি কেন্দ্র একটি দলে আর অন্য দুটি দল একটি কেন্দ্রে মিশে থাকতে পারে।

মোকাবিলার দুটি অস্ত্র scikit-learn-এ default হিসেবেই আছে। প্রথম, init="k-means++": Arthur ও Vassilvitskii (২০০৭)-এর পদ্ধতি, যা দূরের বিন্দুকে বেশি সম্ভাবনায় কেন্দ্র হিসেবে বাছে, আর প্রত্যাশিত objective-কে সর্বোত্তমের O(log k) গুণের মধ্যে রাখে। দ্বিতীয়, n_init: কয়েকবার আলাদা শুরু থেকে চালিয়ে সবচেয়ে কম inertia (objective) রাখা, অংশ ৪-এর “বহু শুরু” কৌশল। scikit-learn-এর সাম্প্রতিক version-এ n_init-এর default "auto", যা k-means++-এর সঙ্গে একবার চালায়; তাই গুরুত্বপূর্ণ কাজে মান নিজে বাড়িয়ে দেওয়া ভালো। আপনার version-এর docs মিলিয়ে নিন।

আরও একটি সীমা: সর্বোত্তম objective পেলেও ভাগটি “সঠিক” না-ও হতে পারে; k-means গোলাকার, সমান আকারের দল ধরে নেয়। Mixture model আর তার নরম ভাগ পর্ব ৩৯-এ আসবে, যেখানে EM-এর likelihood-ও non-convex.

মূল উপলব্ধি: non-convex objective-এ algorithm-এর ফল একটি “ভালো local উত্তর”, নিশ্চিত সেরা নয়; তাই seed, শুরু আর পুনরাবৃত্তির সংখ্যা মডেলের অংশ, রিপোর্টে লিখে রাখার মতো।

প্র ০৫Jensen-এর অসমতা থেকে ensemble সম্পর্কে কী বলা যায়, আর তার সীমা কোথায়?

ধরুন M-টি model একটি উদাহরণে অনুমান দেয় ŷ1, …, ŷM, আর ensemble দেয় তাদের গড় ŷ̄. Loss ℓ(y, ŷ) যদি ŷ-এ convex হয় (squared error, log loss probability-তে, absolute error), তাহলে Jensen বলে ℓ(y, ŷ̄) ≤ (1/M)∑ℓ(y, ŷm). অর্থাৎ গড় অনুমানের loss সদস্যদের গড় loss-এর চেয়ে কখনো বেশি নয়, প্রতিটি উদাহরণে, তাই পুরো test set-এও। Squared error-এ ফারাকটি হুবহু সদস্যদের অনুমানের variance; Krogh ও Vedelsby ১৯৯৫ সালে একে “ambiguity decomposition” নামে বলেন: ensemble-এর ভুল = সদস্যদের গড় ভুল − সদস্যদের মতভেদ।

এই ফল ব্যাখ্যা করে কেন bagging আর random forest কাজ করে (পর্ব ৩৩): গাছগুলো যত আলাদা অনুমান দেয়, গড় তত বেশি লাভবান হয়, যদি প্রত্যেকে নিজে খুব খারাপ না হয়। আবহাওয়ার পূর্বাভাসেও কয়েকটি model-এর গড় নেওয়ার প্রচলন একই যুক্তির ওপর দাঁড়িয়ে।

সীমা তিনটি। (১) ফলটি সদস্যদের গড় loss-এর সঙ্গে তুলনা, সেরা সদস্যের সঙ্গে নয়। একটি খুব ভালো আর চারটি খুব খারাপ model-এর গড় ভালোটির চেয়ে খারাপ হতে পারে। (২) Loss convex না হলে নিশ্চয়তা নেই; 0-1 loss-এ সংখ্যাগরিষ্ঠ ভোট সদস্যদের চেয়ে খারাপও হতে পারে, যদি সদস্যদের ভুলগুলো একসঙ্গে ঘটে। (৩) Log loss-এর ক্ষেত্রে probability-র গড় নেওয়া আর score (logit)-এর গড় নেওয়া আলাদা জিনিস; Jensen-এর নিশ্চয়তা যে চলকে loss convex, সেই চলকের গড়ে খাটে।

Jensen আরও কয়েক জায়গায় নিঃশব্দে কাজ করে: AM–GM অসমতা (log concave), KL divergence ≥ ০, আর EM ও variational inference-এর ELBO, যা log-likelihood-এর নিচের সীমা (পর্ব ৩৯, ৪৮)।

মূল উপলব্ধি: convex loss-এ গড় করা কখনো গড়ের চেয়ে খারাপ নয়, আর লাভের পরিমাণ সদস্যদের মতভেদের সমান; বৈচিত্র্যই ensemble-এর মূলধন।

অনুশীলন

হিসাবগুলো খাতায় করুন, তারপর উত্তর মেলান। চাইলে অংশ ৫-এর পরীক্ষক দিয়ে যাচাই করুন।

  1. পূর্ণ numerical: f(w1, w2) = 2w1² + 2w1w2 + 3w2² − 4w1. (ক) Hessian আর তার eigenvalue বের করুন; f কি strongly convex? μ, L আর κ কত? (খ) সর্বনিম্ন বিন্দু আর সর্বনিম্ন মান বের করুন। (গ) Gradient descent-এ η-এর নিরাপদ ঊর্ধ্বসীমা কত?

    (ক) ∂²f/∂w1² = ৪, ∂²f/∂w1∂w2 = ২, ∂²f/∂w2² = ৬, তাই H = [[৪, ২], [২, ৬]], সব w-এ একই। Trace ১০, determinant ২৪ − ৪ = ২০; eigenvalue ৫ ± √৫ ≈ ২.৭৬৪ আর ৭.২৩৬. দুটিই ধনাত্মক, তাই f strongly convex, μ = ২.৭৬৪, L = ৭.২৩৬, κ = ৭.২৩৬/২.৭৬৪ ≈ ২.৬২. (খ) ∇f = (4w1 + 2w2 − 4, 2w1 + 6w2) = 0. দ্বিতীয় সমীকরণে w1 = −৩w2; প্রথমটিতে বসালে −১২w2 + ২w2 = ৪, তাই w2 = −০.৪ আর w1 = ১.২. মান: ২(১.৪৪) + ২(১.২)(−০.৪) + ৩(০.১৬) − ৪.৮ = ২.৮৮ − ০.৯৬ + ০.৪৮ − ৪.৮ = −২.৪. Strongly convex বলে এটিই একমাত্র global minimum. (গ) Quadratic-এ η < 2/L = ২/৭.২৩৬ ≈ ০.২৭৬; η = 1/L ≈ ০.১৩৮ একটি নিরাপদ পছন্দ।

  2. সমালোচনা ও নকশা: বাজারঘরের একজন সহকর্মী (বা একটি AI assistant) রিপোর্টে লিখেছেন: “আমাদের ছোট neural network তিনটি seed-এ প্রায় একই validation loss দিয়েছে, তাই loss convex, আর আর কোনো seed চালানোর দরকার নেই।” দাবিটির ভুল কোথায়, আর আপনি কীভাবে যাচাইয়ের নকশা করবেন?

    যুক্তির ভুল: একই loss মানে একই বিন্দু নয়; hidden unit অদলবদলে বহু আলাদা ওজনে একই loss হয়। তিনটি run-এ একই মান convexity প্রমাণ করে না, বড়জোর বলে খাদগুলো সমান গভীর। Convexity একটি সার্বিক দাবি, আর একটি লঙ্ঘনই তাকে বাতিল করে। যাচাইয়ের নকশা: (১) দুটি seed-এর শেষ ওজন wA, wB নিয়ে মাঝের বিন্দু (wA + wB)/২-এ training loss মাপুন; সেটি দুই loss-এর গড়ের চেয়ে বেশি হলে জ্যার শর্ত ভেঙেছে (সাধারণত অনেক বেশি হয়)। (২) পুরো রেখা t ∈ [০, ১]-এ loss এঁকে দেখুন। (৩) প্রতিবেদনে অন্তত ৫টি seed-এর গড় আর ছড়ানো দিন, শুধু validation-এ; test set শেষ পর্যন্ত তালা দেওয়া। (৪) একই ডেটায় একটি convex baseline (L2-সহ logistic) চালিয়ে তুলনা করুন; ছোট tabular ডেটায় সেটি প্রায়ই সমান ভালো।

  3. আউটপুট অনুমান করুন: চালানোর আগে লিখে ফেলুন নিচের কোড কী ছাপবে, আর কোন অসমতা এখানে দেখা যাচ্ছে।
    import numpy as np
    v = np.array([1., 4., 16.])
    print(np.mean(np.sqrt(v)), np.sqrt(np.mean(v)))
    print(np.mean(v**2) >= np.mean(v)**2)
    2.3333333333333335 2.6457513110645907
    True

    √১, √৪, √১৬ = ১, ২, ৪, তাদের গড় ৭/৩ ≈ ২.৩৩৩; float-এ ৭/৩ ঠিক লেখা যায় না, তাই শেষে ...৩৩৫. গড় (১ + ৪ + ১৬)/৩ = ৭, √৭ ≈ ২.৬৪৫৮. √ concave, তাই Jensen-এর উল্টো দিক: গড়ের √ বড়। দ্বিতীয় লাইনে x² convex, তাই E[V²] = ৯১ ≥ (E[V])² = ৪৯, ফল True; ফারাক ৪২ হলো variance.

  4. Convex কি না, প্রমাণসহ: প্রতিটির জন্য অংশ ৬-এর নিয়ম বা Hessian দিয়ে উত্তর দিন। (ক) f(w) = ‖Xw − y‖1, যাকে least absolute deviation বলে। (খ) f(w) = max(0, 1 − y·xᵀw)², যাকে squared hinge বলে। (গ) f(w1, w2) = w1w2. (ঘ) f(w) = log(1 + w²), এক চলকে।

    (ক) Convex. |r| = max(r, −r) convex; প্রতিটি ri = xiᵀw − yi affine; তারপর যোগ। (খ) Convex. h = max(0, 1 − y·xᵀw) convex (affine-এর max), আর g(u) = u² u ≥ ০-তে convex ও অ-হ্রাসমান; h কখনো ঋণাত্মক নয়, তাই g(h) convex. এটি hinge-এর মসৃণ রূপ। (গ) Convex নয়। Hessian [[০, ১], [১, ০]], eigenvalue ১ আর −১: indefinite, একটি saddle. সংখ্যায় জ্যা: a = (১, −১), b = (−১, ১), দুটিতে f = −১; মাঝখান (০, ০)-তে f = ০ > −১. (ঘ) Convex নয়। f″(w) = (2 − 2w²)/(1 + w²)², |w| > ১-এ ঋণাত্মক। এটি robust regression-এর একটি loss-এর আকার: বড় residual-এ বাড়ে খুব ধীরে, তাই outlier কম টানে, কিন্তু convexity হারায়।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রম“Convex f-এর local minimum-ই global” প্রমাণের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. ধরে নেওয়া: x* একটি local minimum, আর কোথাও y আছে যেখানে f(y) < f(x*)
  2. x* থেকে y পর্যন্ত রেখার বিন্দু zt = (1 − t)x* + t·y নেওয়া
  3. জ্যার সংজ্ঞা দিয়ে লেখা: f(zt) ≤ (1 − t)f(x*) + t·f(y) < f(x*)
  4. t খুব ছোট নিলে zt x*-এর যেকোনো ছোট পাড়ার ভেতরে চলে আসে
  5. বিরোধ: x* local minimum হতে পারে না, তাই x*-এর চেয়ে নিচু কোনো y নেই

একটি function f convex হওয়ার সংজ্ঞা কোনটি (সব a, b আর ০ ≤ t ≤ ১-এ)?

  • f(ta + (1 − t)b) ≥ tf(a) + (1 − t)f(b)
  • f(ta + (1 − t)b) ≤ tf(a) + (1 − t)f(b)
  • f(a + b) = f(a) + f(b)
  • a ≤ b হলে f(a) ≤ f(b)

নিচের কোন objective তার parameter-এর সাপেক্ষে convex নয়?

  • Logistic regression-এর log loss, ওজন w-এর সাপেক্ষে
  • Lasso-র objective, ওজন w-এর সাপেক্ষে
  • k-means-এর objective, কেন্দ্রগুলোর সাপেক্ষে
  • L2-সহ linear SVM-এর hinge loss, w-এর সাপেক্ষে

f(w1, w2) = w1² + 4w1w2 + w2². এর Hessian-এর eigenvalue আর f-এর convexity সম্পর্কে কোনটি ঠিক?

  • eigenvalue ৬ আর −২; f convex নয়
  • eigenvalue ২ আর ২; f convex
  • eigenvalue ৬ আর ২; f strongly convex
  • সব পদ বর্গ বা গুণফল বলে f সবসময় convex

একটি quadratic loss-এর Hessian-এর eigenvalue ০.৫ আর ৫০. Condition number κ আর gradient descent-এর স্থির ধাপ η-এর নিরাপদ ঊর্ধ্বসীমা কত?

  • κ = ৪৯.৫, η < ৪
  • κ = ১০০, η < ৪
  • κ = ০.০১, η < ০.০৪
  • κ = ১০০, η < ০.০৪

X একটি random variable, যা ০ বা ২ মান নেয়, প্রত্যেকটি সম্ভাবনা ½. f(x) = x² হলে E[f(X)] আর f(E[X]) কত?

  • দুটিই ১
  • E[f(X)] = ২, f(E[X]) = ১
  • E[f(X)] = ১, f(E[X]) = ২
  • E[f(X)] = ২, f(E[X]) = ৪

f(w) = w² − 1 আর g(u) = u² দুটিই convex. তাহলে h(w) = g(f(w)) = (w² − 1)² সম্পর্কে কোনটি ঠিক?

  • দুটি convex function-এর composition বলে h convex
  • h concave, কারণ মাঝখানে একটি চূড়া আছে
  • h convex নয়; g অ-হ্রাসমান নয় বলে composition-এর নিয়ম খাটে না
  • h একটি ধ্রুবক function

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. সংজ্ঞা: জ্যা লেখচিত্রের ওপরে; differentiable হলে স্পর্শক নিচে; দুবার differentiable হলে সব জায়গায় Hessian ⪰ 0. একটি লঙ্ঘনই non-convexity প্রমাণ করে, সংখ্যাগত পাস প্রমাণ করে না।
  2. মূল ফল: convex f-এ local minimum-ই global, minimizer-এর সমষ্টি convex, strictly convex হলে বড়জোর একটি, আর ∇f = 0 মানেই global minimum. Minimum থাকবেই এমন নিশ্চয়তা নেই।
  3. ML-এর মানচিত্র: least squares, ridge, logistic, hinge, lasso parameter-এ convex; neural network, k-means, mixture model নয়। প্রশ্ন সবসময় “কোন চলকের সাপেক্ষে”।
  4. প্রমাণের নিয়ম: অঋণাত্মক যোগ, affine চলক বদল, pointwise max, আর convex ও অ-হ্রাসমান g-এর ভেতরে convex f. গুণফল আর min convexity ভাঙে।
  5. গতি আর Jensen: μI ⪯ ∇²f ⪯ LI, κ = L/μ; L2 μ বাড়ায়, standardize κ কমায়। Convex f-এ f(E[X]) ≤ E[f(X)], যা KL ≥ ০ আর ensemble-এর লাভ ব্যাখ্যা করে।

পরের পর্বে: পর্ব ১৩ (Gradient descent-এর পরিবার — batch, SGD, mini-batch আর learning-rate schedule) এই পর্বের κ-কে চলমান করবে: সরু বাটিতে zig-zag পথ, η < 2/L কেন, mini-batch gradient কেন একটি noisy কিন্তু নিরপেক্ষ আন্দাজ, আর learning-rate schedule.

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান