Foundations
A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting
The 1997 paper by Freund and Schapire that analysed the Hedge algorithm for on-line allocation and reversed it into AdaBoost, with its training-error and VC bounds, the multiclass and regression versions, the 1995 conference version, and its reception and later corrections.
advanced
“A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting” by Yoav Freund and Robert E. Schapire of AT&T Labs appeared in the Journal of Computer and System Sciences in August 1997, after an extended abstract at the Second European Conference on Computational Learning Theory (EuroCOLT) in Barcelona in March 1995. It has two halves. The first studies an on-line problem: how to spread a fixed stake over options, round after round, so that the total loss is not much worse than that of the best option in hindsight. It answers with a multiplicative-weight algorithm called Hedge() and proves bounds for it. The second half turns that algorithm around to obtain AdaBoost, a boosting algorithm that, unlike its predecessors, needs no advance knowledge of how good the weak learner is. The paper proves that AdaBoost’s training error falls exponentially when every weak hypothesis beats chance, bounds the VC dimension of its output, and gives extensions to multiclass problems (AdaBoost.M1 and AdaBoost.M2) and to regression (AdaBoost.R). It received the 2003 Gödel Prize.
The method as it is used today, with labels , the exponential-loss and margin explanations, gradient boosting and boosted detectors, is covered in the boosting article; this article covers the paper. The typeset journal article could not be read: ScienceDirect served it only behind a bot challenge, and no archived copy of the PDF was found. Everything below comes from the authors’ manuscript dated 19 December 1996, which both authors host on their web pages and whose footnote states that it appeared in the journal. Section, theorem, equation and figure numbers are the manuscript’s, and page numbers within the journal’s 119–139 are not given.
Problem
Weak learning and the earlier boosters
In the PAC model, which the paper reviews in §4, a strong learning algorithm must reach any error with probability in time polynomial in , and the size of the problem; a weak one only needs error at most for some . Schapire (1990) had shown that any weak learner can be boosted into a strong one, and Freund’s boost-by-majority algorithm had made the conversion considerably more efficient. The boosting article tells this history. Freund and Schapire name the practical weakness of boost-by-majority: it needs the weak learner’s worst-case edge in advance. That edge is rarely known, varies from one reweighted distribution to the next, and the algorithm gains nothing from weak hypotheses that do better than the assumed .
On-line allocation
The paper opens with a gambler who lets friends bet on his behalf and wants to divide each race’s stake among them so that his season’s winnings come close to what the luckiest friend would have won. Formally (§1), an allocator chooses a distribution over strategies at each step ; an environment, possibly adversarial and possibly aware of , then assigns each strategy a loss , and the allocator suffers the mixture loss . The goal is a small net loss
Littlestone and Warmuth’s weighted majority algorithm and the work of Cesa-Bianchi and colleagues on predicting with expert advice had proved such bounds for binary decisions with a loss. The paper’s aim was bounds for any bounded loss over any decision and outcome spaces, slightly weaker in special cases but far more general.
Contribution
- Hedge() (Figure 1, §2), a direct generalization of weighted majority to the allocation problem, with loss bounds (Lemma 1, Theorem 2, Equations 7–12), a proof that its constants are optimal (Theorem 3, proved in the appendix using Vovk’s results), and applications (§3).
- AdaBoost (Figure 2, §4.1), derived by reducing boosting to on-line allocation in reverse. The paper explains the name: unlike earlier algorithms, it adjusts adaptively to the errors of the weak hypotheses.
- A training-error bound that uses every weak hypothesis (Theorem 6), not just the worst, and that needs no prior knowledge of the edge.
- A generalization analysis (§4.3): a bound on the VC dimension of AdaBoost’s final hypotheses (Theorem 8), with structural risk minimization or a validation set to choose the number of rounds.
- Extensions (§5): AdaBoost.M1 and AdaBoost.M2 for classes and AdaBoost.R for regression, each analysed by a reduction to the binary algorithm.
Method
Hedge() and its bounds
Hedge keeps a nonnegative weight per strategy, starting from any initial weights that sum to one (the paper suggests reading them as a prior; uniform weights are the default). Each round it allocates in proportion to the weights and then multiplies each weight by raised to that strategy’s loss:
The analysis bounds the total weight from both sides. Since for , each round multiplies the total weight by at most , which gives Lemma 1, . From below, strategy alone keeps weight . Together (Theorem 2, Equation 7):
The bound grows only logarithmically with . Equation (8) generalizes it to sets of strategies, which the authors note handles infinite and even uncountable collections. Writing Equation (9) as with and (Equation 10), Theorem 3 shows that any algorithm with a bound of that form for every must, for each , have or , so no algorithm improves both of Hedge’s constants at once.
For choosing (§2.2), Lemma 4 sets with , where is a prior bound on the best strategy’s loss; with this gives Equation (11),
When only the number of rounds is known, works, and the average net loss per round falls as , or roughly when the prior bound is near zero. The paper notes, citing Cesa-Bianchi et al., that the square-root term cannot be improved by more than a constant factor in general.
Section 3 applies the bound to an expert setting with a decision space , an outcome space and a loss (Theorem 5): -ary sequence prediction, repeated matrix games such as rock, paper, scissors, where the average loss per round is at most the value of the game plus a term that vanishes as grows, even when the learner does not know the game, and prediction of points in under any loss that is convex in the prediction, including Cover’s log loss for universal portfolios.
From Hedge to boosting
Section 4.1 sets up batch boosting “by sampling” (Freund’s term): a fixed training set of examples with , and a distribution over them, ordinarily uniform, under which the final hypothesis should have low error. The weak learner receives a distribution each round and may return a real-valued hypothesis , read as the probability of predicting 1, so that its error is the expected absolute difference from the label. A footnote notes that a learner that cannot use weights can be fed a resampled training set instead.
The surprise, in the authors’ words a “dual” relationship (§4.2), is how the reduction runs. One might expect weak hypotheses to play the strategies and training examples the trials. In AdaBoost it is the reverse: the examples are the strategies, the rounds are the weak hypotheses, and the loss of example in round is
which is small when is wrong on . Hedge moves weight towards strategies that do well; AdaBoost therefore moves weight towards examples the weak hypotheses get wrong.
The paper first applies Hedge directly. If every weak hypothesis has error at most with known, Hedge with and an unweighted majority vote has error at most . AdaBoost improves on this in two ways: a sharper choice of and a better bound, and no need to know . It measures each and sets from it, so that a more accurate hypothesis both changes the distribution more and gets a larger vote.
AdaBoost as printed
Figure 2 of the manuscript, in the paper’s notation:
- Set .
- For : normalize, ; call the weak learner with and get ; compute its error ; set ; update .
- Output
With Boolean hypotheses and , a correct example’s weight is multiplied by and a mistake’s weight is left alone, which after normalization raises the share of the mistakes. A footnote states that the update exactly removes the advantage of the last hypothesis: its error under is exactly . The vote is twice the of the form in the boosting article, and writing a Boolean as with turns the threshold rule into ; by our arithmetic the two forms make the same predictions, with ties going to label 1. The figure writes and the text ; the base cancels from the threshold.
The paper points out that AdaBoost sums the weak hypotheses’ probabilistic predictions rather than taking a majority of rounded ones, the combination that Drucker, Schapire and Simard had found better in practice with neural networks but which had lacked a justification.
The training-error bound
Theorem 6 (Equation 14): if the weak learner returns hypotheses with errors , the error of under satisfies
The proof follows Lemma 1 and Theorem 2. Each round multiplies the total weight by at most (Equations 15–16); an example on which errs keeps a final weight of at least (Equations 17–19); hence (Equation 20), and minimizing each factor gives and Equation (14). The paper notes that the theorem holds even if some . With (Equations 21–22),
and for equal edges , a form of the Chernoff bound with the same asymptotic behaviour as boost-by-majority’s. Equation (23) turns this into a number of rounds, . The authors stress that the bound improves when any weak hypothesis improves, while earlier bounds depended only on the weakest one, which matters because the weak learner’s error is expected to grow as the distributions drift away from the target.
Section 4.5 shows that replacing the hard threshold by a soft one, a function of the normalized vote with and a bound on that a particular sigmoid satisfies, halves the bound to (Theorem 9), with the output read as a randomized prediction.
Generalization
Theorem 6 is about the training sample. For the error on new examples, §4.3 quotes Vapnik’s uniform-convergence theorem (Theorem 7: with probability at least , every hypothesis in a class of VC dimension has empirical and true errors within ) and proves Theorem 8: if the weak hypotheses come from a class of VC dimension , the linear thresholds of of them, which include AdaBoost’s output after rounds, have VC dimension at most
The proof views as a two-layer network and applies a counting result of Baum and Haussler. To choose , the paper describes structural risk minimization with these bounds and warns that they may be loose and so pick too few rounds; its simple alternative is to hold out a validation set and take the with the lowest validation error. The next paragraph already records the observation that would later need explaining: initial experiments by the authors and by Drucker and Cortes indicated that AdaBoost tends not to overfit, its generalization error often continuing to drop, or at least not rising, after hundreds of rounds.
Section 4.4 adds a Bayesian reading. If the weak hypotheses’ mistakes are independent of each other and of the label, the Bayes-optimal combination of -valued hypotheses with errors , after adding a constant hypothesis to account for the prior, is exactly AdaBoost’s weighted vote; the authors suggest AdaBoost as a principled alternative to this naive-Bayes rule when the independence assumption is not justified.
Multiclass and regression
AdaBoost.M1 (Figure 3, §5.1) is the direct extension to labels : the error becomes , the loop aborts if , and the output is the label with the largest total vote . Theorem 10 gives the same bound as Theorem 6 when each , by a reduction to the binary algorithm. The authors note that error below one half is much stronger than beating random guessing, whose error is , when , and show that with error rate as the only measure the difficulty is unavoidable: a learner that recognizes label 2 but guesses between 0 and 1 is right at least half the time but cannot be boosted. Their second example is from optical character recognition: a weak learner may easily tell a “7” from a “0” but not from a “9”.
AdaBoost.M2 (Figure 4, §5.2) lets the weak hypotheses say more. A hypothesis gives a degree of belief for every label, and is judged by a pseudo-loss that averages, with a label weighting supplied by the booster, how often it would fail to tell the correct label from each wrong label :
The booster keeps a weight for every pair of example and wrong label, so it can steer the weak learner both towards hard examples and towards the wrong labels hardest to rule out. Any uninformative hypothesis has pseudo-loss , so beating is a weak, chance-relative requirement, and Theorem 11 bounds the error by . The paper notes that this bound is weaker than M1’s, and reports, citing its authors’ own experiments (Freund and Schapire, 1996), that pseudo-loss helped most with very restricted weak learners and made little difference with decision trees. It also mentions the alternative of reducing a multiclass problem to binary ones with error-correcting output codes.
AdaBoost.R (Figure 5, §5.3) handles with squared error. Each example becomes a continuum of binary questions, “is above or below ?”, weighted so that the binary error in the reduced problem is proportional to the squared error, with a constant between 1 and 2. The weights are piecewise-linear functions of and can be stored exactly; the final hypothesis is a weighted median of the weak predictions; Theorem 12 (Equation 26) gives the bound of Equation (14) for the mean squared error. The authors note as a drawback that no trivial weak hypothesis has loss exactly , sketch a confidence-rated fix, and say that other bounded losses, zero at the true label and differentiable and monotone on either side of it, need only a change of the initial weights.
Results
The paper has no experiments of its own. Its results are the theorems above. Of AdaBoost’s empirical record it says only that successful experiments had been run since its introduction, by the authors (the ICML 1996 paper “Experiments with a New Boosting Algorithm”), by Drucker and Cortes, by Jackson and Craven, by Quinlan and by Breiman, and that the early experiments showed little overfitting.
Hedge’s bounds are worst-case guarantees, and the example below shows how they compare with an actual run. It turns Hedge loose on a stream of 2,000 synthetic grayscale patches, about half of which contain a slightly brighter disc at a random position. The 64 “experts” are fixed rules, each predicting “disc” when one random rectangle is brighter on average than another, and each loss is 1 for a wrong label. The script compares Hedge’s loss with the best expert’s in hindsight for the paper’s choice and for two fixed values, together with Equations (9) and (11). It uses NumPy 2.3.5 and runs in about 2 seconds.
import numpy as np
S = 16 # patch size (pixels)
yy, xx = np.mgrid[0:S, 0:S] + 0.5
def patch(disc, rng):
"""Background of random brightness with Gaussian noise; with label 1 it also holds
a slightly brighter disc of random radius and position."""
img = np.full((S, S), rng.uniform(0.3, 0.7))
if disc:
r, (cy, cx) = rng.uniform(3, 5), S / 2 + rng.uniform(-3, 3, 2)
img[(yy - cy) ** 2 + (xx - cx) ** 2 <= r * r] += rng.uniform(0.05, 0.2)
return img + rng.normal(0, 0.1, (S, S))
def experts(N, rng):
"""N fixed rules, each 'disc' when one rectangle is brighter on average than another."""
rects = []
for _ in range(N):
pair = []
for _ in range(2):
h, w = rng.integers(2, 7, 2)
pair.append((rng.integers(0, S - h + 1), rng.integers(0, S - w + 1), h, w))
rects.append(pair)
def predict(img):
m = [[img[y:y + h, x:x + w].mean() for y, x, h, w in pair] for pair in rects]
return np.array([float(a > b) for a, b in m])
return predict
def hedge(losses, beta):
"""Hedge(beta), Figure 1: uniform initial weights, w_i <- w_i * beta**loss_i."""
w = np.full(losses.shape[1], 1 / losses.shape[1])
total = 0.0
for l in losses:
p = w / w.sum() # allocation p^t
total += p @ l # mixture loss p^t . l^t
w = w * beta ** l
return total
g = lambda z: 1 / (1 + np.sqrt(2 / z)) # Lemma 4
T, N = 2000, 64
beta = g(T / np.log(N)) # L~ = T, the choice when only T is known
print(f"T = {T} patches, N = {N} experts, loss 1 for a wrong label, beta* = g(T/ln N) = {beta:.4f}")
print(" cumulative loss loss minus the best expert's")
print("seed best expert mean expert Hedge(beta*) bound (9) bound (11) Hedge(0.5) Hedge(0.99)")
for seed in range(5):
rng = np.random.default_rng(seed)
predict = experts(N, rng)
labels = rng.random(T) < 0.5
losses = np.array([np.abs(predict(patch(d, rng)) - d) for d in labels]) # T x N, in {0, 1}
L = losses.sum(0) # cumulative loss of each expert
b9 = (L.min() * np.log(1 / beta) + np.log(N)) / (1 - beta)
b11 = L.min() + np.sqrt(2 * T * np.log(N)) + np.log(N)
print(f"{seed:4d} {L.min():11.0f} {L.mean():11.1f} " + " ".join(
f"{v - L.min():{w}.1f}" for v, w in ((hedge(losses, beta), 12), (b9, 9), (b11, 10),
(hedge(losses, 0.5), 10), (hedge(losses, 0.99), 11))))
Output:
T = 2000 patches, N = 64 experts, loss 1 for a wrong label, beta* = g(T/ln N) = 0.9394
cumulative loss loss minus the best expert's
seed best expert mean expert Hedge(beta*) bound (9) bound (11) Hedge(0.5) Hedge(0.99)
0 535 987.8 70.2 85.5 133.1 11.6 249.5
1 591 1031.0 68.3 87.3 133.1 37.9 246.3
2 564 1025.7 72.1 86.5 133.1 12.2 271.4
3 564 996.0 61.5 86.5 133.1 16.1 222.0
4 553 999.0 61.7 86.1 133.1 28.7 240.8
Most rules are useless, with an average loss near 1,000 of 2,000, and the best of them still errs on 535–591 patches. With the paper’s , Hedge ends 61.5–72.1 mistakes above the best rule on every seed, inside the hindsight bound (9), which allows 85.5–87.3, and the bound (11), which allows 133.1 knowing only and . Dividing the stake equally, whose loss is the mean expert’s, would have cost 432–462 more than the best rule (the mean minus the best column). The bounds hold for any sequence, including one chosen by an adversary, and that is what they pay for: on this stationary stream a much smaller , which abandons bad rules quickly, comes within 11.6–37.9 mistakes of the best rule, while moves so slowly that it loses 222.0–271.4 more. This is our reading of five runs, not a claim of the paper, which recommends tuning from prior knowledge of the problem (§2.2).
Versions
EuroCOLT 1995. The extended abstract appeared in the proceedings of EuroCOLT ’95 (Springer, pages 23–37), with the authors at AT&T Bell Laboratories. Its title is misspelled “desicion-theoretic” in the publisher’s page and in Crossref. We could not read its text, which Springer does not offer freely. Its abstract, as the publisher’s page gives it, covers on-line allocation, the applications and the new boosting algorithm; the manuscript’s abstract adds a sentence on extending the boosting algorithm to labels from a finite set or a bounded interval of the real line. Whether the conference text already contained AdaBoost.M1, M2 or R was not checked.
Journal of Computer and System Sciences 55(1), 1997. The cited version. The manuscript of 19 December 1996 has 35 pages: sections 1–5, the acknowledgments, 26 references and an appendix with the proof of Theorem 3. Whether the typeset article differs from it was not checked.
Naming. In the paper, AdaBoost is the binary algorithm with labels and AdaBoost.M1 its first multiclass extension. Later accounts attach the M1 name to the binary algorithm: The Elements of Statistical Learning (§10.1) presents the two-class algorithm with labels as the algorithm Freund and Schapire (1997) called “AdaBoost.M1”, and Friedman, Hastie and Tibshirani (2000) describe their Discrete AdaBoost as essentially AdaBoost.M1 for binary data. With and Boolean weak hypotheses the two coincide, apart from AdaBoost.M1 stopping when and the handling of ties (our reading of Figures 2 and 3).
Impact
Freund and Schapire received the 2003 Gödel Prize for this paper. The prize citation on ACM SIGACT’s page says the paper introduced AdaBoost and credits the algorithm’s elegance, simple implementation, wide applicability and striking success in reducing errors on benchmarks even though its theoretical assumptions are not known to hold; it adds that the algorithm set off an explosion of research in statistics, artificial intelligence, experimental machine learning and data mining.
Schapire (2013) calls AdaBoost the first practical boosting algorithm, and the paper’s analysis became the starting point for the explanations that followed. The VC analysis of §4.3 predicts that test error must eventually rise with the number of rounds; Schapire, Freund, Bartlett and Lee (1998) note that Quinlan and Breiman pointed out experiments contradicting this, in which test error kept falling after training error reached zero, and proposed in its place a bound based on the margins of the training examples that does not grow with . Breiman, as Schapire (2013) credits him, first observed that AdaBoost’s choices minimize the exponential loss; Friedman, Hastie and Tibshirani (2000) developed this into a statistical view of boosting as forward stagewise additive modelling, and the view of boosting as functional gradient descent, which Schapire attributes to Mason and colleagues and to Friedman, extended it to other losses and to regression. The boosting article covers these explanations.
In computer vision the paper’s main descendant is the face detector of Viola and Jones (2001), which used AdaBoost in the form of Figure 2, with a weak learner restricted to one Haar-like feature per round so that boosting also selected features, and placed the boosted classifiers in a cascade.
Limitations
- No experiments. The paper’s case for AdaBoost in practice rests on cited work.
- A training-set guarantee. Theorem 6 bounds error on the training distribution only, and is informative only while the weak learner keeps beating chance on every reweighted distribution, which the paper assumes rather than guarantees for any given hypothesis class. Its generalization bound grows with , while the early experiments it reports showed little overfitting.
- Multiclass gaps. AdaBoost.M1 needs error below one half for , which the paper shows can be unattainable; AdaBoost.M2 needs a weak learner that minimizes a pseudo-loss, and its bound grows with . Some extensions are stated with their details omitted: confidence-rated hypotheses for AdaBoost.M1 and AdaBoost.R, and the factor-of-two improvement of the AdaBoost.M2 bound.
- Worst-case focus. Hedge’s bounds hold against an adversary, and the paper notes that superior algorithms or analyses are known in many of its specific applications.
Slips in the manuscript
By our reading of the manuscript, two statements are misprinted; the typeset version may differ.
- Example 3 (§3). The gap between Hedge’s average loss in a repeated game and the value of the game is said to decrease at the rate , which would shrink as the number of actions grows. Equation (12), with and , gives .
- After Equation (22). The bound is described as a Chernoff bound on the probability that fewer than of coin tosses come up heads when heads has probability . That event is the likely one; bounds the probability of at least heads with that coin, or equivalently of fewer than heads when heads has probability .
What Came After
The repeated-game application of Hedge was developed in the authors’ COLT 1996 paper “Game Theory, On-Line Prediction and Boosting”, which the manuscript cites for details. For boosting, the line of work runs through the margin analysis of Schapire, Freund, Bartlett and Lee (1998), the statistical view of Friedman, Hastie and Tibshirani (2000), confidence-rated boosting, gradient boosting and the multiclass SAMME algorithm, all described in the boosting article, and into vision through boosted cascades for face detection and the Viola–Jones detector. Choosing the number of rounds on held-out data, the paper’s practical alternative to its own bounds, is also what The Elements of Statistical Learning recommends for gradient boosting (§10.12), by monitoring the error on a validation sample; cross-validation is the general form of the idea.
Related
- Boosting
How boosting turns many weak classifiers, such as single-feature decision stumps on image patches, into an accurate weighted vote, covering AdaBoost and its training-error bound, the exponential-loss and margin explanations, gradient boosting, sensitivity to label noise, scikit-learn's AdaBoostClassifier, and boosted feature selection in face and object detection.
- Rapid Object Detection using a Boosted Cascade of Simple Features
The CVPR 2001 paper by Viola and Jones that combined the integral image, AdaBoost feature selection and an attentional cascade into a frontal face detector running at 15 frames per second, with its 2004 journal version and the comparisons, inconsistencies and influence of both.
- Viola-Jones Object Detection
The boosted cascade detector of Viola and Jones, which selects a few rectangle features with AdaBoost and chains the resulting classifiers so that most background windows are rejected after a handful of feature evaluations.
- Machine Learning
How a program learns a task such as recognizing objects from examples instead of hand-written rules, why doing well on the training images is not the goal, and how features, models, data and evaluation fit together in computer vision.
- Haar-like Features
Rectangle features that compare the summed intensities of adjacent image regions, computed in constant time at any position and scale from an integral image, the representation behind the Viola–Jones face detector.
- Cross-Validation
How k-fold cross-validation and its variants (leave-one-out, repeated, stratified, grouped, time-ordered and nested) reuse a small labelled image set for both training and evaluation, what the estimate measures, how noisy it is, and why tuning and reporting on the same folds is optimistic.
References
- Freund, Y. & Schapire, R. E. (1997). A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting. Journal of Computer and System Sciences, 55(1), 119–139. Section, theorem, equation and figure numbers cited from the authors' manuscript of 19 December 1996.
- Freund, Y. & Schapire, R. E. (1995). A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting. Computational Learning Theory: Second European Conference, EuroCOLT '95, 23–37. Springer. The publisher's metadata spells the title 'desicion-theoretic'.
- Freund, Y. & Schapire, R. E. (1996). Experiments with a New Boosting Algorithm. Machine Learning: Proceedings of the Thirteenth International Conference (ICML), 148–156.
- Littlestone, N. & Warmuth, M. K. (1994). The Weighted Majority Algorithm. Information and Computation, 108(2), 212–261.
- Schapire, R. E. (1990). The Strength of Weak Learnability. Machine Learning, 5(2), 197–227.
- Freund, Y. (1995). Boosting a Weak Learning Algorithm by Majority. Information and Computation, 121(2), 256–285.
- Schapire, R. E., Freund, Y., Bartlett, P. & Lee, W. S. (1998). Boosting the Margin: A New Explanation for the Effectiveness of Voting Methods. The Annals of Statistics, 26(5), 1651–1686. Cited from the authors' copy of 7 May 1998.
- Friedman, J., Hastie, T. & Tibshirani, R. (2000). Additive Logistic Regression: A Statistical View of Boosting. The Annals of Statistics, 28(2), 337–407.
- Hastie, T., Tibshirani, R. & Friedman, J. (2009). The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd ed.). Springer. Section numbers cited from the authors' free PDF.
- Schapire, R. E. (2013). Explaining AdaBoost. In B. Schölkopf, Z. Luo & V. Vovk (Eds.), Empirical Inference: Festschrift in Honor of Vladimir N. Vapnik, 37–52. Springer.
- Viola, P. & Jones, M. (2001). Rapid Object Detection using a Boosted Cascade of Simple Features. IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR), 1, I-511–I-518.
- ACM SIGACT. 2003 Gödel Prize.