{"id":1691,"date":"2026-10-21T10:40:43","date_gmt":"2026-10-21T02:40:43","guid":{"rendered":"https:\/\/people.utm.my\/arazin\/?p=1691"},"modified":"2026-10-21T10:49:57","modified_gmt":"2026-10-21T02:49:57","slug":"from-fem-to-pinns-a-new-research-direction","status":"publish","type":"post","link":"https:\/\/people.utm.my\/arazin\/2026\/10\/21\/from-fem-to-pinns-a-new-research-direction\/","title":{"rendered":"From FEM to PINNs: A New Research Direction"},"content":{"rendered":"<div style=\"max-width:820px;margin:0 auto;color:#1f2328;font-size:17px;line-height:1.8\">\n<p style=\"font-size:12px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#7b1c22;margin:0 0 6px\">AI from First Principles &middot; Week 06 Revisited<\/p>\n<p style=\"font-size:19px;color:#4a5059;margin:0 0 10px\">I&#8217;ll be honest up front: this is the topic I&#8217;m most excited about in the whole course. Here&#8217;s why Week 06 matters, what the results tell us, what they don&#8217;t &mdash; and an open invitation at the end for students who want to work on it with me.<\/p>\n<p style=\"font-size:14px;color:#4a5059;margin:0 0 28px\">Session date: 7 October 2026 &middot; <a href=\"https:\/\/msnm.com.my\/wp\/online-ai-class\/#ai-week-06\" style=\"color:#7b1c22\">Week 06 on the MSNM course page<\/a><\/p>\n<h2 style=\"color:#7b1c22;font-size:26px;line-height:1.3;margin:36px 0 12px\">From data-driven to physics-informed<\/h2>\n<p>For five weeks, every network we built learned the same way: give it inputs, give it the right answers, and let it close the gap. In <a href=\"https:\/\/msnm.com.my\/wp\/online-ai-class\/#ai-week-04\" style=\"color:#7b1c22\">Week 04<\/a>, for example, the CNN surrogate needed 5,000 FE solutions before it could predict anything.<\/p>\n<p>Week 06 flipped that around. A Physics-Informed Neural Network (PINN) doesn&#8217;t need a dataset of solutions at all. Instead, the governing equation, boundary conditions and initial conditions go straight into the loss function. The network is penalised whenever it <em>breaks the physics<\/em>, not whenever it disagrees with a label.<\/p>\n<p>For anyone who has spent years writing FEM or meshfree codes, that should sound very familiar. And that&#8217;s exactly why I find it so interesting.<\/p>\n<figure style=\"margin:28px 0\"><img decoding=\"async\" src=\"https:\/\/msnm.com.my\/wp\/wp-content\/uploads\/2026\/10\/Screenshot-2026-10-07-at-10.46.58-PM-1024x544.png\" alt=\"Week 06 online session showing the PINN solution surface over the x-t domain\" style=\"max-width:100%;height:auto;border-radius:8px;border:1px solid #e6e1dc\" \/><figcaption style=\"font-size:14px;color:#4a5059;text-align:center;margin-top:8px\">Tuesday night, 7 October &mdash; the PINN solution surface over the <i>x<\/i>&ndash;<i>t<\/i> domain, built entirely in NumPy.<\/figcaption><\/figure>\n<h2 style=\"color:#7b1c22;font-size:26px;line-height:1.3;margin:36px 0 12px\">The problem<\/h2>\n<p>We used the classic one-dimensional wave equation, kept in dimensional (unscaled) form on purpose for Part A:<\/p>\n<p style=\"text-align:center;font-family:Georgia,serif;font-size:19px\">&part;&sup2;<i>u<\/i>\/&part;<i>t<\/i>&sup2; &minus; <i>c<\/i>&sup2; &part;&sup2;<i>u<\/i>\/&part;<i>x<\/i>&sup2; = 0<\/p>\n<p>with fixed ends, <i>u<\/i>(0,<i>t<\/i>) = <i>u<\/i>(1,<i>t<\/i>) = 0, and a string released from rest in its first mode, <i>u<\/i>(<i>x<\/i>,0) = sin(&pi;<i>x<\/i>) and &part;<i>u<\/i>\/&part;<i>t<\/i>(<i>x<\/i>,0) = 0. With <i>L<\/i> = <i>c<\/i> = <i>A<\/i> = 1, the analytical solution is simply <i>u<\/i> = sin(&pi;<i>x<\/i>) cos(&pi;<i>t<\/i>), so we always know exactly how wrong the network is.<\/p>\n<p>The network itself is as small as it gets: inputs <i>x<\/i> and <i>t<\/i>, one hidden layer of <i>m<\/i> tanh neurons, and a single output:<\/p>\n<p style=\"font-family:Georgia,serif;font-size:18px;text-align:center;background:#fbfaf8;border:1px solid #e6e1dc;border-radius:8px;padding:12px 16px\"><i>&ucirc;<\/i>(<i>x<\/i>,<i>t<\/i>) = &Sigma;<sub><i>j<\/i>=1<\/sub><sup><i>m<\/i><\/sup> <i>v<\/i><sub><i>j<\/i><\/sub> tanh(<i>w<\/i><sub>2<i>j<\/i>&minus;1<\/sub><i>x<\/i> + <i>w<\/i><sub>2<i>j<\/i><\/sub><i>t<\/i> + <i>b<\/i><sub><i>j<\/i><\/sub>)<\/p>\n<h2 style=\"color:#7b1c22;font-size:26px;line-height:1.3;margin:36px 0 12px\">What I really liked<\/h2>\n<h3 style=\"font-size:18px;margin:26px 0 8px\">1. Everything by hand. No autodiff, no PyTorch.<\/h3>\n<p>This is the part that makes the course unusual. Every derivative of the network, every residual, and all twelve loss gradients (four parameter types &times; three losses) were derived on paper first, then coded line by line in NumPy with the equation numbers written next to each line. No <code>loss.backward()<\/code> hiding anything.<\/p>\n<p>It&#8217;s slow, and it&#8217;s meant to be. Once you&#8217;ve derived &part;<i>L<\/i><sub>D<\/sub>\/&part;<i>b<\/i><sub><i>k<\/i><\/sub> yourself and seen the <em>third<\/em> derivative of tanh appear in it, you understand why PINNs are expensive in a way no tutorial can teach you.<\/p>\n<h3 style=\"font-size:18px;margin:26px 0 8px\">2. &ldquo;The derivative of a network is just another network&rdquo;<\/h3>\n<p>This was my favourite moment. Dr. Airil drew the derivatives as four networks &mdash; A, B, C and D &mdash; sharing exactly the same inputs and hidden layer. The only things that change are the activation and the output weights:<\/p>\n<div style=\"margin:18px 0\">\n<table style=\"width:100%;border-collapse:collapse;font-size:15px\">\n<thead>\n<tr>\n<th style=\"background:#f6eced;color:#7b1c22;text-align:left;padding:9px 12px\">Network<\/th>\n<th style=\"background:#f6eced;color:#7b1c22;text-align:left;padding:9px 12px\">Computes<\/th>\n<th style=\"background:#f6eced;color:#7b1c22;text-align:left;padding:9px 12px\">Hidden activation<\/th>\n<th style=\"background:#f6eced;color:#7b1c22;text-align:left;padding:9px 12px\">Output weight<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">A<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\"><i>&ucirc;<\/i><\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">&sigma;<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\"><i>v<\/i><sub><i>j<\/i><\/sub><\/td>\n<\/tr>\n<tr>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">B<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">&part;<i>&ucirc;<\/i>\/&part;<i>t<\/i><\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">&sigma;&prime;<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\"><i>v<\/i><sub><i>j<\/i><\/sub><i>w<\/i><sub>2<i>j<\/i><\/sub><\/td>\n<\/tr>\n<tr>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">C<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">&part;&sup2;<i>&ucirc;<\/i>\/&part;<i>x<\/i>&sup2;<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">&sigma;&Prime;<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\"><i>v<\/i><sub><i>j<\/i><\/sub><i>w<\/i><sub>2<i>j<\/i>&minus;1<\/sub>&sup2;<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:9px 12px\">D<\/td>\n<td style=\"padding:9px 12px\">&part;&sup2;<i>&ucirc;<\/i>\/&part;<i>t<\/i>&sup2;<\/td>\n<td style=\"padding:9px 12px\">&sigma;&Prime;<\/td>\n<td style=\"padding:9px 12px\"><i>v<\/i><sub><i>j<\/i><\/sub><i>w<\/i><sub>2<i>j<\/i><\/sub>&sup2;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>So the domain residual is just <i>R<\/i><sub>D<\/sub> = Network D &minus; <i>c<\/i>&sup2; &times; Network C, evaluated at a collocation point. Once you see it drawn this way, it&#8217;s hard to un-see.<\/p>\n<h3 style=\"font-size:18px;margin:26px 0 8px\">3. It looks a lot like our own methods<\/h3>\n<p>This is where my own research brain switched on. Put the PINN next to things we already know:<\/p>\n<ul style=\"padding-left:20px\">\n<li style=\"margin-bottom:8px\"><i>&ucirc;<\/i> = &Sigma; <i>v<\/i><sub><i>j<\/i><\/sub> &sigma;<sub><i>j<\/i><\/sub> reads just like <i>u<\/i> = &Sigma; <i>N<\/i><sub><i>i<\/i><\/sub> <i>d<\/i><sub><i>i<\/i><\/sub>. The <i>v<\/i><sub><i>j<\/i><\/sub> play the role of nodal unknowns, and the tanh neurons act like basis functions &mdash; except their shape and position (<i>w<\/i>, <i>b<\/i>) are trained too. An <em>adaptive<\/em> basis.<\/li>\n<li style=\"margin-bottom:8px\">Enforcing the PDE at scattered points (<i>x<\/i><sub><i>i<\/i><\/sub>, <i>t<\/i><sub><i>i<\/i><\/sub>) is <strong>strong-form point collocation<\/strong>, the same family as collocation meshfree methods.<\/li>\n<li style=\"margin-bottom:8px\">Adding the boundary residuals to the loss is essentially a <strong>penalty method<\/strong> for BCs &mdash; soft enforcement, not exact.<\/li>\n<\/ul>\n<p>Those connections aren&#8217;t just cute analogies. Strong-form collocation and penalty-type BC enforcement both come with well-known weaknesses, especially near boundaries. Which brings me to the results.<\/p>\n<h2 style=\"color:#7b1c22;font-size:26px;line-height:1.3;margin:36px 0 12px\">So how did it do?<\/h2>\n<p>Training used 1,000 random domain points, 100 points on each boundary, 100 initial-condition points, a learning rate of 0.0005, and a simple SGD-like scheme that updates the parameters after every single point. Here&#8217;s what the snapshot at <i>t<\/i> = 0.25 showed, read from the plots in the note:<\/p>\n<div style=\"margin:18px 0\">\n<table style=\"width:100%;border-collapse:collapse;font-size:15px\">\n<thead>\n<tr>\n<th style=\"background:#f6eced;color:#7b1c22;text-align:left;padding:9px 12px\"><i>m<\/i><\/th>\n<th style=\"background:#f6eced;color:#7b1c22;text-align:left;padding:9px 12px\">Epochs<\/th>\n<th style=\"background:#f6eced;color:#7b1c22;text-align:left;padding:9px 12px\">Interior<\/th>\n<th style=\"background:#f6eced;color:#7b1c22;text-align:left;padding:9px 12px\"><i>&ucirc;<\/i>(1, 0.25) (exact = 0)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background:#fff8e6\">\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">5<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">1,000<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">Almost flat &mdash; fails<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">&asymp; 0.30<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">10<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">2,500<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">Close, slightly low at peak<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">&asymp; 0.13<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">20<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">5,000<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">Very close<\/td>\n<td style=\"padding:9px 12px;border-bottom:1px solid #e6e1dc\">&asymp; 0.09<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:9px 12px\">50<\/td>\n<td style=\"padding:9px 12px\">10,000<\/td>\n<td style=\"padding:9px 12px\">Practically on top<\/td>\n<td style=\"padding:9px 12px\">&asymp; 0.05<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p style=\"font-size:14px;color:#4a5059\">Approximate values read from Figure 12 of the note. Peak displacement at <i>t<\/i> = 0.25 is about 0.71, so the <i>m<\/i> = 10 boundary error is roughly 18% of the peak.<\/p>\n<p>The trend is exactly what you&#8217;d hope for: more neurons and more epochs, and the PINN converges towards the analytical solution. Getting there with a from-scratch NumPy code and no data at all is genuinely satisfying.<\/p>\n<p>But look at the last column. Even at <i>m<\/i> = 50, the right-hand end still isn&#8217;t pinned at zero, while the left end behaves nicely. <strong>That asymmetry is the most interesting thing in the whole session<\/strong>, and I don&#8217;t think we know yet why it happens.<\/p>\n<h2 style=\"color:#7b1c22;font-size:26px;line-height:1.3;margin:36px 0 12px\">What the results don&#8217;t show yet<\/h2>\n<p>Again, not a criticism &mdash; Part A was designed to be transparent, not optimal. But these are the questions I&#8217;d want answered before trusting a PINN on a real engineering problem:<\/p>\n<ol style=\"padding-left:22px\">\n<li style=\"margin-bottom:14px\"><strong>Why is the right boundary worse?<\/strong> A few candidate explanations: the domain loop does 1,000 updates per epoch against only 200 boundary updates, so the PDE &ldquo;outvotes&rdquo; the BCs; the fixed loop order (domain &rarr; boundary &rarr; initial) means the IC updates always get the last word each epoch; or something about how tanh neurons initialised around the origin reach <i>x<\/i> = 1. These are hypotheses, not findings. Each one is testable.<\/li>\n<li style=\"margin-bottom:14px\"><strong>The BCs are only approximately satisfied.<\/strong> That&#8217;s the price of penalty-type enforcement. An alternative is to build the BCs into the trial function, for example <i>&ucirc;<\/i> = <i>x<\/i>(1 &minus; <i>x<\/i>) <i>N<\/i>(<i>x<\/i>,<i>t<\/i>), so they hold exactly. It changes every gradient, but it removes a whole loss term.<\/li>\n<li style=\"margin-bottom:14px\"><strong>No error norm yet.<\/strong> We compared plots, not numbers. A relative <i>L<\/i><sub>2<\/sub> error over the <i>x<\/i>&ndash;<i>t<\/i> domain would let us talk about convergence <em>rates<\/em>, not just &ldquo;it gets closer&rdquo;.<\/li>\n<li style=\"margin-bottom:14px\"><strong>No cost comparison.<\/strong> A finite difference scheme solves this problem to high accuracy in a fraction of a second. For forward problems like this one, the PINN isn&#8217;t competing on speed. Its real strengths lie elsewhere &mdash; inverse problems, sparse measured data, and mesh-free handling of awkward geometries.<\/li>\n<li style=\"margin-bottom:14px\"><strong>One smooth mode, one time window.<\/strong> The solution is a single sine mode over <i>t<\/i> &isin; [0, 1]. Higher modes, sharper features, or predicting beyond the training time window are all known to be much harder for PINNs.<\/li>\n<\/ol>\n<p>Part B will tackle some of these directly: nondimensional equations, weighted and normalised losses, deeper networks and automatic differentiation. Keep an eye on the <a href=\"https:\/\/msnm.com.my\/wp\/online-ai-class\/\" style=\"color:#7b1c22\">course page<\/a> for it.<\/p>\n<h2 style=\"color:#7b1c22;font-size:26px;line-height:1.3;margin:36px 0 12px\">Try it yourself: three small experiments<\/h2>\n<ul style=\"padding-left:20px\">\n<li style=\"margin-bottom:8px\"><strong>Gradient check.<\/strong> Hand-derived gradients deserve verification. Compare one of them against a finite-difference estimate (snippet below). If they agree to several digits, you can trust the other eleven a lot more.<\/li>\n<li style=\"margin-bottom:8px\"><strong>More boundary points.<\/strong> Raise <code>n_B<\/code> from 100 to 500 and see whether the right-end error shrinks. If it does, the &ldquo;PDE outvotes the BCs&rdquo; hypothesis gains some weight.<\/li>\n<li style=\"margin-bottom:8px\"><strong>Change the loop order.<\/strong> Run the boundary loop last instead of the initial-condition loop. Does the asymmetry move?<\/li>\n<\/ul>\n<pre style=\"background:#f3f0ec;padding:16px 18px;border-radius:8px;font-size:14px;line-height:1.55\"># Finite-difference check of dL_D\/dv_k at one domain point\ndef domain_loss(w, b, v, x, t, c=1.0):\n    wx, wt = w[0::2], w[1::2]          # w[2k] -&gt; x, w[2k+1] -&gt; t\n    s = np.tanh(wx*x + wt*t + b)\n    s2 = -2.0*s*(1.0 - s**2)           # second derivative of tanh\n    uxx = np.sum(v*wx**2*s2)           # Network C\n    utt = np.sum(v*wt**2*s2)           # Network D\n    return (utt - c**2*uxx)**2, utt - c**2*uxx, s2\n\nx_i, t_i, k, eps = 0.3, 0.4, 2, 1e-6\nL0, R_D, s2 = domain_loss(w, b, v, x_i, t_i, c)\nwx, wt = w[2*k], w[2*k+1]\ng_hand = 2*R_D*(wt**2 - c**2*wx**2)*s2[k]          # Eq. (45)\n\nvp, vm = v.copy(), v.copy(); vp[k] += eps; vm[k] -= eps\ng_fd = (domain_loss(w, b, vp, x_i, t_i, c)[0]\n        - domain_loss(w, b, vm, x_i, t_i, c)[0]) \/ (2*eps)\nprint(f\"hand = {g_hand:.8e}, FD = {g_fd:.8e}, rel diff = {abs(g_hand-g_fd)\/abs(g_fd):.2e}\")<\/pre>\n<div style=\"background:#7b1c22;color:#ffffff;border-radius:10px;padding:28px 28px 20px;margin:40px 0 10px\">\n<p style=\"font-size:24px;font-weight:700;line-height:1.3;color:#ffffff;margin:0 0 12px\">Students: want to do research on PINNs? Talk to me.<\/p>\n<p style=\"color:#f3e3e4;margin:0 0 14px\">PINNs sit right where my own work lives &mdash; computational mechanics, FEM and meshfree methods &mdash; and I&#8217;m actively looking for students who want to dig into them. Final-year projects, MSc and PhD are all welcome. Some directions I&#8217;d love to explore:<\/p>\n<ul style=\"color:#f3e3e4;padding-left:20px;margin:0 0 16px\">\n<li style=\"margin-bottom:6px\"><strong style=\"color:#ffffff\">PINNs vs. meshfree collocation<\/strong> &mdash; what can each learn from the other, especially on boundary accuracy?<\/li>\n<li style=\"margin-bottom:6px\"><strong style=\"color:#ffffff\">Exact vs. penalty-type BC enforcement<\/strong> &mdash; and the loss-balancing problem that comes with it.<\/li>\n<li style=\"margin-bottom:6px\"><strong style=\"color:#ffffff\">PINNs for structural mechanics<\/strong> &mdash; beams, plates and elasticity, where fourth-order equations make things far more interesting.<\/li>\n<li style=\"margin-bottom:6px\"><strong style=\"color:#ffffff\">Inverse problems<\/strong> &mdash; identifying stiffness, damage or material parameters from limited measurements.<\/li>\n<li style=\"margin-bottom:6px\"><strong style=\"color:#ffffff\">Energy-based and hybrid FEM&ndash;PINN formulations<\/strong> &mdash; bringing the weak form back into the picture.<\/li>\n<\/ul>\n<p style=\"color:#f3e3e4;margin:0 0 18px\">You don&#8217;t need to be an AI expert already. Comfort with calculus, some Python, and real curiosity are enough &mdash; this course is the best possible starting point. Email me with a short note about yourself and what caught your interest.<\/p>\n<p style=\"margin:0\"><a href=\"mailto:arazin@utm.my?subject=PINN%20research%20enquiry\" style=\"display:inline-block;background:#ffffff;color:#7b1c22;font-weight:600;padding:10px 18px;border-radius:5px;text-decoration:none;margin:0 10px 10px 0\">Email arazin@utm.my &#8599;<\/a><a href=\"https:\/\/msnm.com.my\/wp\/online-ai-class\/\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;border:1px solid #ffffff;color:#ffffff;font-weight:600;padding:10px 18px;border-radius:5px;text-decoration:none;margin:0 10px 10px 0\">Start with the course &#8599;<\/a><\/p>\n<\/div>\n<h2 style=\"color:#7b1c22;font-size:26px;line-height:1.3;margin:36px 0 12px\">Week 06 materials &mdash; all open<\/h2>\n<ul style=\"padding-left:20px\">\n<li style=\"margin-bottom:10px\"><a href=\"https:\/\/drive.google.com\/file\/d\/1rA65yyKCJUU0MU7sF5rm_W6NICJkc0Gb\/view?usp=sharing\" target=\"_blank\" rel=\"noopener\" style=\"color:#7b1c22;font-weight:600\">Note (Week 06) &#8599;<\/a> &mdash; the annotated class note<\/li>\n<li style=\"margin-bottom:10px\"><a href=\"https:\/\/github.com\/msnm-official\/ai_modules\/blob\/9c17bb3e93b26f3f5006cdb5062bf2e7c00185a6\/Airil%20et%20al%20PINN%20Part%20A.pdf\" target=\"_blank\" rel=\"noopener\" style=\"color:#7b1c22;font-weight:600\">Module: PINN Part A &#8599;<\/a> &mdash; full derivations, gradients and NumPy code<\/li>\n<li style=\"margin-bottom:10px\"><a href=\"https:\/\/drive.google.com\/file\/d\/1h3N-ueSD4NS9kPRJxvxtJJ88WEwT_oeL\/view?usp=sharing\" target=\"_blank\" rel=\"noopener\" style=\"color:#7b1c22;font-weight:600\">Recorded Video, Part 1 &#8599;<\/a> &mdash; forward pass, network derivatives and residuals<\/li>\n<li style=\"margin-bottom:10px\"><a href=\"https:\/\/drive.google.com\/file\/d\/1y4XdFcHveMho-kvseIU9Ch2agTDdT694\/view?usp=sharing\" target=\"_blank\" rel=\"noopener\" style=\"color:#7b1c22;font-weight:600\">Recorded Video, Part 2 &#8599;<\/a> &mdash; gradients, the training loops and results<\/li>\n<li style=\"margin-bottom:10px\"><a href=\"https:\/\/github.com\/msnm-official\/ai_modules\" target=\"_blank\" rel=\"noopener\" style=\"color:#7b1c22;font-weight:600\">AI Learning Modules &#8599;<\/a> &mdash; all course modules on the MSNM GitHub<\/li>\n<\/ul>\n<p>New to the course? Start from <a href=\"https:\/\/msnm.com.my\/wp\/online-ai-class\/#ai-week-01\" style=\"color:#7b1c22\">Week 01<\/a> &mdash; the backpropagation in <a href=\"https:\/\/msnm.com.my\/wp\/online-ai-class\/#ai-week-02\" style=\"color:#7b1c22\">Week 02<\/a> is exactly what Week 06 builds on. The class is free and runs online every <strong>Tuesday, 9:00&ndash;11:00 PM (Malaysia time)<\/strong>; you can <a href=\"https:\/\/forms.gle\/ArsRx4a35TpcSkum7\" target=\"_blank\" rel=\"noopener\" style=\"color:#7b1c22\">register here<\/a> and <a href=\"https:\/\/chat.whatsapp.com\/DqS4h7eJdVJ8LazYPR4sM5?s=cl&amp;p=i&amp;ilr=4\" target=\"_blank\" rel=\"noopener\" style=\"color:#7b1c22\">join the WhatsApp group<\/a>.<\/p>\n<p style=\"margin-top:32px;padding-top:18px;border-top:1px solid #e6e1dc;font-size:15.5px;color:#4a5059\">Thanks to Dr. Airil for a session that was genuinely hard work to follow and worth every minute, and to everyone who stuck with twelve hand-derived gradients late on a Tuesday night. If you try any of the experiments above, share your results in the WhatsApp group &mdash; especially if you crack the right-boundary puzzle.<\/p>\n<p style=\"font-size:15.5px;color:#4a5059\">See you in class!<br \/><strong style=\"color:#1f2328\">Dr. Ahmad Razin Zainal Abidin<\/strong><br \/>Faculty of Civil Engineering, UTM &middot; Malaysian Society for Numerical Methods<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>AI from First Principles &middot; Week 06 Revisited I&#8217;ll be honest up front: this is the topic I&#8217;m most excited about in the whole course. Here&#8217;s why Week 06 matters, what the results tell us, what they don&#8217;t &mdash; and an open invitation at the end for students who want to work on it with [&hellip;]<\/p>\n","protected":false},"author":6455,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[18,19],"tags":[17,14],"class_list":["post-1691","post","type-post","status-publish","format-standard","hentry","category-ai","category-review","tag-ai","tag-msnm"],"_links":{"self":[{"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/posts\/1691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/users\/6455"}],"replies":[{"embeddable":true,"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/comments?post=1691"}],"version-history":[{"count":2,"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/posts\/1691\/revisions"}],"predecessor-version":[{"id":1694,"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/posts\/1691\/revisions\/1694"}],"wp:attachment":[{"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/media?parent=1691"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/categories?post=1691"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/people.utm.my\/arazin\/wp-json\/wp\/v2\/tags?post=1691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}