Probabilistic Inference
-
Upload
anthony-stark -
Category
Documents
-
view
34 -
download
0
description
Transcript of Probabilistic Inference
![Page 1: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/1.jpg)
Probabilistic Inference
![Page 2: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/2.jpg)
Agenda
• Review of probability theory
• Joint, conditional distributions
• Independence
• Marginalization and conditioning
• Intro to Bayesian Networks
![Page 3: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/3.jpg)
Probabilistic Belief Consider a world where a dentist agent D
meets with a new patient P
D is interested in only whether P has a cavity; so, a state is described with a single proposition – Cavity
Before observing P, D does not know if P has a cavity, but from years of practice, he believes Cavity with some probability p and Cavity with probability 1-p
The proposition is now a boolean random variable and (Cavity, p) is a probabilistic belief
![Page 4: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/4.jpg)
Probabilistic Belief State
The world has only two possible states, which are respectively described by Cavity and Cavity
The probabilistic belief state of an agent is a probabilistic distribution over all the states that the agent thinks possible
In the dentist example, D’s belief state is:
Cavity Cavityp 1-p
![Page 5: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/5.jpg)
Multivariate Belief State
We now represent the world of the dentist D using three propositions – Cavity, Toothache, and PCatch
D’s belief state consists of 23 = 8 states each with some probability:
{CavityToothachePCatch, CavityToothachePCatch, CavityToothachePCatch,...}
![Page 6: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/6.jpg)
The belief state is defined by the full joint probability of the
propositions
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
![Page 7: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/7.jpg)
Probabilistic Inference
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
P(Cavity Toothache) = 0.108 + 0.012 + ...= 0.28
![Page 8: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/8.jpg)
Probabilistic Inference
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
P(Cavity) = 0.108 + 0.012 + 0.072 + 0.008= 0.2
![Page 9: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/9.jpg)
Probabilistic Inference
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
Marginalization: P(c) = tpc P(ctpc) using the conventions that c = Cavity or Cavity and that t is the sum over t = {Toothache, Toothache}
![Page 10: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/10.jpg)
Komolgorov’s Probability Axioms
• 0 P(a) 1• P(true) = 1, P(false) = 0• P(a b) = P(a) + P(b) - P(a b)
![Page 11: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/11.jpg)
Decoding Probability Notation
• Capital letters A,B,C denote random variables
• Each random variable X can take one of a set of possible values xVal(X)– Confusingly, this is often left implicit
• Probabilities defined over logical statements, e.g., P(X=x)– Confusingly, this is often written P(x)…
![Page 12: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/12.jpg)
Decoding Probability Notation
• Interpretation of P(A) depends on if A treated as a logical statement, or a random variable
• As a logical statement– Just the probability that A is true– P(A) = 1-P(A)
• As a random variable– Denotes both P(A is true) and P(A is false)– For non-boolean variables, denotes P(A=a) for all a
Val(A)
• Computation requires marginalization– Belief space A, B, C, D, … often left implicit– Marginalize the joint distribution over all combinations of
B, C, D… (event space)
![Page 13: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/13.jpg)
Decoding Probability Notation
• How to interpret P(AB) = P(A,B)?• As a logical statement
– Probability that both A and B are true• As random variables
– {P(A=0,B=0), P(A=1,B=0), P(A=0,B=1), P(A=1,B=1)}
– P(A=a,B=b) for all aVal(A), bVal(B) in general
• Equal to P(A)P(B)? No!!! (except under very special conditions)
![Page 14: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/14.jpg)
Quiz: What does this mean?
P(AB) = P(A)+P(B)- P(AB)
P(A=a B=b) = P(A=a) + P(B=b)- P(A=a B=b)
For all aVal(A) and bVal(B)
![Page 15: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/15.jpg)
Marginalization
• Express P(A,B) in terms of P(A,B,C) • If C is boolean,
– P(A,B) = P(A,B,C=0)+ P(A,B,C=1)
• In general– P(A,B) = cVal(C) P(A,B,C=c)
![Page 16: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/16.jpg)
Conditional Probability
P(AB) = P(A|B) P(B)= P(B|A) P(A)
P(A|B) is the posterior probability of A given B
Axiomatic definition:P(A|B) = P(A,B)/P(B)
![Page 17: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/17.jpg)
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
P(Cavity|Toothache) = P(CavityToothache)/P(Toothache) = (0.108+0.012)/(0.108+0.012+0.016+0.064) = 0.6
Interpretation: After observing Toothache, the patient is no longer an “average” one, and the prior probability (0.2) of Cavity is no longer valid
P(Cavity|Toothache) is calculated by keeping the ratios of the probabilities of the 4 cases unchanged, and normalizing their sum to 1
![Page 18: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/18.jpg)
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
P(Cavity|Toothache) = P(CavityToothache)/P(Toothache)= (0.108+0.012)/(0.108+0.012+0.016+0.064) = 0.6
P(Cavity|Toothache)=P(CavityToothache)/P(Toothache)= (0.016+0.064)/(0.108+0.012+0.016+0.064) = 0.4
P(c|Toochache) = (P(Cavity|Toothache), P(Cavity|Toothache))= P(c Toothache)
= pc P(c Toothache pc) = [(0.108, 0.016) + (0.012, 0.064)] = (0.12, 0.08) = (0.6, 0.4)
normalizationconstant
![Page 19: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/19.jpg)
Conditioning
• Express P(A) in terms of P(A|B), P(B)• If C is boolean,
– P(A) = P(A|B=0) P(B=0)+ P(A|B=1) P(B=1)
• In general– P(A) = bVal(B) P(A|B=b) P(B=b)
![Page 20: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/20.jpg)
Conditional Probability
P(AB) = P(A|B) P(B)= P(B|A) P(A)
P(ABC) = P(A|B,C) P(BC)= P(A|B,C) P(B|C) P(C)
P(Cavity) = tpc P(Cavitytpc)
= tpc P(Cavity|t,pc) P(tpc)
![Page 21: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/21.jpg)
Independence
Two random variables A and B are independent if
P(AB) = P(A) P(B) hence if P(A|B) = P(A)
Two random variables A and B are independent given C, if
P(AB|C) = P(A|C) P(B|C)hence if P(A|B,C) = P(A|C)
![Page 22: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/22.jpg)
Updating the Belief State
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
Let D now observe Toothache with probability 0.8 (e.g., “the patient says so”)
How should D update its belief state?
![Page 23: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/23.jpg)
Updating the Belief State
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
Let E be the evidence such that P(Toothache|E) = 0.8 We want to compute P(ctpc|E) = P(cpc|t,E) P(t|E) Since E is not directly related to the cavity or the probe
catch, we consider that c and pc are independent of E given t, hence: P(cpc|t,E) = P(cpc|t)
![Page 24: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/24.jpg)
Let E be the evidence such that P(Toothache|E) = 0.8 We want to compute P(ctpc|E) = P(cpc|t,E) P(t|E) Since E is not directly related to the cavity or the probe
catch, we consider that c and pc are independent of E given t, hence: P(cpc|t,E) = P(cpc|t) To get these 4 probabilities
we normalize their sum to 0.2
To get these 4 probabilities we normalize their sum to 0.8
Updating the Belief State
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
0.432
0.064 0.256
0.048 0.018
0.036 0.144
0.002
![Page 25: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/25.jpg)
Issues
If a state is described by n propositions, then a belief state contains 2n states (possibly, some have probability 0)
Modeling difficulty: many numbers must be entered in the first place
Computational issue: memory size and time
![Page 26: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/26.jpg)
Bayes’ Rule and other Probability Manipulations
P(AB) = P(A|B) P(B)= P(B|A) P(A)
P(A|B) = P(B|A) P(A) / P(B) Can manipulate distributions, e.g.
P(B) = a P(B|A=a) P(A=a) Can derive P(A|B), P(B) using only P(B|A) and P(A)
So, if any variables are conditionally independent, we should be able to decompose joint distribution to take advantage of it
![Page 27: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/27.jpg)
Toothache and PCatch are independent given Cavity (or Cavity), but this relation is hidden in the numbers ! [Verify this]
Bayesian networks explicitly represent independence among propositions to reduce the number of probabilities defining a belief state
PCatch PCatch PCatch PCatch
Cavity 0.108 0.012 0.072 0.008
Cavity 0.016 0.064 0.144 0.576
Toothache Toothache
![Page 28: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/28.jpg)
Bayesian Network Notice that Cavity is the “cause” of both
Toothache and PCatch, and represent the causality links explicitly
Give the prior probability distribution of Cavity Give the conditional probability tables of
Toothache and PCatch
Cavity
Toothache
P(Cavity)
0.2
P(Toothache|c)
CavityCavity
0.60.1
PCatch
P(PCatch|c)
CavityCavity
0.90.02
5 probabilities, instead of 7
P(ctpc) = P(tpc|c) P(c) = P(t|c) P(pc|c) P(c)
![Page 29: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/29.jpg)
Conditional Probability Tables
Cavity
Toothache
P(Cavity)
0.2
P(Toothache|c)
CavityCavity
0.60.1
PCatch
P(PCatch|c)
CavityCavity
0.90.02
P(ctpc) = P(tpc|c) P(c) = P(t|c) P(pc|c) P(c)
P(t|c) P(t|c)
CavityCavity
0.60.1
0.40.9
Rows sum to 1
If X takes n values, just store n-1 entries
![Page 30: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/30.jpg)
Naïve Bayes Models
P(Cause,Effect1,…,Effectn)
= P(Cause) i P(Effecti | Cause)
Cause
Effect1 Effect2 Effectn
![Page 31: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/31.jpg)
Naïve Bayes Classifier
P(Class,Feature1,…,Featuren)
= P(Class) i P(Featurei | Class)
Class
Feature1 Feature2 Featuren
P(C|F1,….,Fk) = P(C,F1,….,Fk)/P(F1,….,Fk)
= 1/Z P(C) i P(Fi|C)
Given features, what class?
Spam / Not Spam
English / French/ Latin
…
Word occurrences
![Page 32: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/32.jpg)
Equations Involving Random Variables
• C = A B• C = max(A,B)• Constrains joint probability P(A,B,C)• Nicely encoded as causality
relationship
C
A B
Conditional probability given by equation rather than a CPT
![Page 33: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/33.jpg)
A More Complex BN
Burglary Earthquake
Alarm
MaryCallsJohnCalls
causes
effects
Directed acyclic graph
Intuitive meaning of arc from x to y:
“x has direct influence on y”
![Page 34: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/34.jpg)
B E P(A|…)
TTFF
TFTF
0.950.940.290.001
Burglary Earthquake
Alarm
MaryCallsJohnCalls
P(B)
0.001
P(E)
0.002
A P(J|…)
TF
0.900.05
A P(M|…)
TF
0.700.01
Size of the CPT for a node with k parents: 2k
A More Complex BN
10 probabilities, instead of 31
![Page 35: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/35.jpg)
What does the BN encode?
Each of the beliefs JohnCalls and MaryCalls is independent of Burglary and Earthquake given Alarm or Alarm
Burglary Earthquake
Alarm
MaryCallsJohnCalls
For example, John doesnot observe any burglariesdirectly
P(bj) P(b) P(j)P(bj|a) P(b|a) P(j|a)
![Page 36: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/36.jpg)
The beliefs JohnCalls and MaryCalls are independent given Alarm or Alarm
For instance, the reasons why John and Mary may not call if there is an alarm are unrelated
Burglary Earthquake
Alarm
MaryCallsJohnCalls
What does the BN encode?
P(bj|a) P(b|a) P(j|a)P(jm|a) P(j|a) P(m|a)P(bj|a) P(b|a) P(j|a)P(jm|a) P(j|a) P(m|a)
A node is independent of its non-descendants given its parents
A node is independent of its non-descendants given its parents
![Page 37: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/37.jpg)
The beliefs JohnCalls and MaryCalls are independent given Alarm or Alarm
For instance, the reasons why John and Mary may not call if there is an alarm are unrelated
Burglary Earthquake
Alarm
MaryCallsJohnCalls
What does the BN encode?
A node is independent of its non-descendants given its parents
A node is independent of its non-descendants given its parents
Burglary and Earthquake are independent
Burglary and Earthquake are independent
![Page 38: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/38.jpg)
Locally Structured World A world is locally structured (or sparse) if
each of its components interacts directly with relatively few other components
In a sparse world, the CPTs are small and the BN contains much fewer probabilities than the full joint distribution
If the # of entries in each CPT is bounded by a constant, i.e., O(1), then the # of probabilities in a BN is linear in n – the # of propositions – instead of 2n for the joint distribution
![Page 39: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/39.jpg)
But does a BN represent a belief state?
In other words, can we compute the full joint
distribution of the propositions from it?
![Page 40: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/40.jpg)
Calculation of Joint Probability
B E P(A|…)
TTFF
TFTF
0.950.940.290.001
Burglary Earthquake
Alarm
MaryCallsJohnCalls
P(B)
0.001
P(E)
0.002
A P(J|…)
TF
0.900.05
A P(M|…)
TF
0.700.01
P(jmabe) = ??
![Page 41: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/41.jpg)
P(jmabe)= P(jm|a,b,e) P(abe)= P(j|a,b,e) P(m|a,b,e) P(abe)(J and M are independent given A)
P(j|a,b,e) = P(j|a)(J and B and J and E are independent given A)
P(m|a,b,e) = P(m|a) P(abe) = P(a|b,e) P(b|e) P(e)
= P(a|b,e) P(b) P(e)(B and E are independent)
P(jmabe) = P(j|a)P(m|a)P(a|b,e)P(b)P(e)
Burglary Earthquake
Alarm
MaryCallsJohnCalls
![Page 42: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/42.jpg)
Calculation of Joint Probability
B E P(A|…)
TTFF
TFTF
0.950.940.290.001
Burglary Earthquake
Alarm
MaryCallsJohnCalls
P(B)
0.001
P(E)
0.002
A P(J|…)
TF
0.900.05
A P(M|…)
TF
0.700.01
P(JMABE)= P(J|A)P(M|A)P(A|B,E)P(B)P(E)= 0.9 x 0.7 x 0.001 x 0.999 x 0.998= 0.00062
![Page 43: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/43.jpg)
Calculation of Joint Probability
B E P(A|…)
TTFF
TFTF
0.950.940.290.001
Burglary Earthquake
Alarm
MaryCallsJohnCalls
P(B)
0.001
P(E)
0.002
A P(J|…)
TF
0.900.05
A P(M|…)
TF
0.700.01
P(jmabe)= P(j|a)P(m|a)P(a|b,e)P(b)P(e)= 0.9 x 0.7 x 0.001 x 0.999 x 0.998= 0.00062
P(x1x2…xn) = i=1,…,nP(xi|parents(Xi))
full joint distribution table
![Page 44: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/44.jpg)
Calculation of Joint Probability
B E P(A|…)
TTFF
TFTF
0.950.940.290.001
Burglary Earthquake
Alarm
MaryCallsJohnCalls
P(B)
0.001
P(E)
0.002
A P(J|…)
TF
0.900.05
A P(M|…)
TF
0.700.01
P(x1x2…xn) = i=1,…,nP(xi|parents(Xi))
full joint distribution table
P(jmabe)= P(j|a)P(m|a)P(a|b,e)P(b)P(e)= 0.9 x 0.7 x 0.001 x 0.999 x 0.998= 0.00062
Since a BN defines the full joint distribution of a set of propositions, it represents a belief state
Since a BN defines the full joint distribution of a set of propositions, it represents a belief state
![Page 45: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/45.jpg)
The BN gives P(t|c) What about P(c|t)? P(Cavity|t)
= P(Cavity t)/P(t)= P(t|Cavity) P(Cavity) /
P(t)[Bayes’ rule]
P(c|t) = P(t|c) P(c)
Querying a BN is just applying the trivial Bayes’ rule on a larger scale… algorithms next time
Querying the BN
Cavity
Toothache
P(C)
0.1
C P(T|c)
TF
0.40.01111
![Page 46: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/46.jpg)
More Complicated Singly-Connected Belief Net
Radio
Battery
SparkPlugs
Starts
Gas
Moves
![Page 47: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/47.jpg)
Some Applications of BN
Medical diagnosis Troubleshooting of
hardware/software systems Fraud/uncollectible debt detection Data mining Analysis of genetic sequences Data interpretation, computer vision,
image understanding
![Page 48: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/48.jpg)
Region = {Sky, Tree, Grass, Rock}
R2
R4R3
R1
Above
![Page 49: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/49.jpg)
BN to evaluate insurance risks
![Page 50: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/50.jpg)
Purposes of Bayesian Networks
Efficient and intuitive modeling of complex causal interactions
Compact representation of joint distributions O(n) rather than O(2n)
Algorithms for efficient inference with new evidence (more on this next time)
![Page 51: Probabilistic Inference](https://reader035.fdocuments.in/reader035/viewer/2022070402/568138a8550346895da06628/html5/thumbnails/51.jpg)
Reminder
• HW4 due on Thursday!