Thursday, March 4, 2010

一撮生命的清茶

在BYR上看到一首“打油诗”:

  青瓷传清茶,接杯交盏。君莫怜,只有酒醉人。 娇花映鲛人,泪织绮罗。月无言,徒留魂梦欺。

  看到“清茶”二字,想起来下边这个典故。

一个屡屡失意的年轻人千里迢迢来到普济寺,慕名寻到老僧释圆,沮丧地对他说:“人生总不如意,活着也是苟且,有什么意思呢?”
  释圆静静听着年轻人的叹息和絮叨,末了才吩咐小和尚说:“施主远道而来,烧一壶温水送过来。”
  稍顷,小和尚送来了一壶温水,释圆抓了茶叶放进杯子,然后用温水沏了,放在茶几上,微笑着请年轻人喝茶。杯子冒出微微的水汽,茶叶静静地浮着。年轻人不解地询问:“宝刹怎么用温茶?”
  释圆笑而不语。年轻人喝一口细品,不由得摇摇头:“一点茶香都没有呢。”释圆说:“这可是闽地名茶铁观音啊。”年轻人又端起杯子品尝,然后肯定地说:“真的没有一丝茶香。”
  释圆又吩咐小和尚:“再去烧一壶沸水送过来。”稍顷,小和尚便提着一壶冒着浓浓白汽的沸水进来。释圆起身,又取过一个杯子,放茶叶,倒沸水,再放在茶几上。年轻人俯首看去,茶叶在杯子里上下沉浮,丝丝清香不绝如缕,望而生津。
  年轻人想要去端杯,释圆挡开,又提起水壶注入一线沸水。茶叶翻腾得更厉害了,一缕更醇厚更醉人的茶香袅袅升腾,在禅房里弥漫开来。释圆一共注了五次水,杯子终于满了,那绿绿的一杯茶水,端在手上清香扑鼻,入口沁人心脾。
  释圆笑着问:“施主可知道,同是铁观音,为什么茶味相差这么大吗?”
  年轻人思忖着说:“一杯用温水,一杯用沸水,冲沏的水不同。”释圆点头:“用水不同,茶叶的沉浮就不一样。温水沏茶,茶叶轻浮于水上,怎会散发清香?沸水沏茶,反复几次,茶叶沉沉浮浮,才能释放出茶的清香。世间芸芸众生,又何尝不是沉浮的茶叶呢?那些不经风雨的人,就像温水沏的茶叶,只在生活表面漂浮,根本浸泡不出生命的芳香;而那些栉风沐雨的人,如被沸水冲沏的酽茶,在沧桑岁月里几度沉浮,才有那沁人的清香啊。”
  浮生若茶,我们何尝不是一撮生命的清茶?命运又何尝不是一壶温水或炽热的沸水呢?茶叶因为沉浮才释放了本身的清香,而生命,也只有遭遇一次次挫折和坎坷,才激发出人生那一脉脉幽香。

Wednesday, March 3, 2010

Statistical Learning Algorithm - Expectation Maximization

In machine learning, usually we are given a set of observed data, based on which we can do classification, clustering, etc. Classical techniques involved in these scenarios include Naive Bayes Classifier, Decision Tree Learning, K-means, KNN (K-nearest neighbors), etc. However, there may be situations when un-observed data or hidden variables are present. Expectation Maximization (EM) method is such a important statistical algorithm used to estimate the parameters in probabilistic models, where the models may depend on unobserved latent variables. In this sense, EM is similar with MLE (Maximum Likelihood Estimation) method. However, EM is basically a iterative method, which means that it needs to modify its estimates in each iteration, which makes it also similar with K-means. They both hold the "Gradient Descent" or "Hill Climbing" property; the drawback of these two approaches is then obvious: if the algorithm is not initialized well, it may encounter "local-maxima" problem!
We will start with a description of general EM algorithm; after that we focus on its application in Gaussian Mixture Model (GMM), which is important and widely used.

The EM algorithm seeks to find the MLE by iteratively applying the following two major steps:

Expectation Step:

Calculate the expected value of the likelihood function as we discussed in MLE method. This expected value should be based on the conditional distribution of the hidden variables given the partially observed dataset under the current estimates of parameters. We call this expected value G(arg).
Maximization Step:

Update the paramters we are currently working on, choosing new parameters that will maximize G(arg) through some special schemes. Sometimes this scheme may be taking the weighted average of current parameters.

Of course, EM will need to initialize the parameters that would be estimated, just like what we did in a K-means algorithm: generally, any hill-climbing techniques will have similar problem. How to select the initial values? Randomly (The default method)? Or use some special techniques? The result of EM algorithm, as will be discussed later, is heavily dependent on "where we started".

Example: EM Algorithm in Gaussian Mixture Models

Clusters in data often comes from a mixture distribution, which may have k components. A datapoint is obtained by choosing a component and then apply that component to generate a sample. As for continuous data, a natural choice of probabilistic model is the multivariate Gaussian, which forms the mixture of Gaussian distributions. The parameters of a GMM are Wi = P(C = i), i.e. the weight of each component, Ui, i.e. the mean of each component, and i, the covariance of each component.

This basic idea of EM in this context is to pretend that we know the parameters of the model, and then to infer the probability that each datapoint belongs to each component. After that, we refit the components to the data, where each component is fitted to the entire data set with each point weighted by the probability that it belongs to that component. This process iterates until convergence. The hidden variables, in this case, would be which distribution component each datapoint belongs to. For the mixture of Gaussians, we randomly innitialize parameters for the mixture model, and then repeat following steps:

1. E - Step

Compute Pij = P(C = i Xj), which is the probability that datapoint Xj was generated by component Ci. By Bayes' rules, we have Pij = alpha*P(Xj C = i)*P(C = i), where alpha is a normalizer. P(Xj C = i) is just the probability density at Xj of the component Ci, and P(C = i) is the weight of Ci. Let Pi = j Pij.

2. M - Step

Update the mean, covariance, and component weights as follows.

Ui <- j Pij*Xj/Pi

i <- j Pij*(Xj - Ui)(Xj - Ui)'/Pi

Wi <- Pi.

One thing to mention is, EM increases the log likelihood of the data at every iteration. In some situation, as discussed above, EM will reach a local maxima. A Matlab implementation of EM algorithm for Gaussian Mixture Models is attached here.

--------------------Matlab Codes for EM-GMM-------------------------

function [means, covs, weights, probDens, maxVals, maxIDs] = EMGaussianMixtureModel(dataset, k)% This is an EM algorithm for estimating parameters in Gaussian Mixture% Model% 'dataset' is the data ready for cluster% 'k' is the number of Gaussian components
% Get the dimension of each data pointdim = length(dataset(1, :));
% Get the number of data points in this datasetnum = length(dataset(:, 1));
% Initialize the weight uniformly for each Gaussian modelweights = zeros(k, 1);
for i = 1 : k weights(i) = 1/k;end
% Initialize means for each Gaussian modelmeans = zeros(k, dim);
% Initialize covariance matrix for each Gaussian modelcovs = zeros(dim, dim, k);
for i = 1 : k A = randn(dim, dim); covs(:, :, i) = A*A';end
% Initialize the probability table where probTable(X, i) stores the% probability that data point X was generated by component iprobTable = zeros(num, k);
% Begin EM AlgorithmnotConverge = 1;iterCount = 0;maxCount = 1000;
while(notConverge) % Expectation Step % Iterate the dataset to fill 'probTable' iterCount = iterCount + 1; for i = 1 : k for j = 1 : num p = mvnpdf(dataset(j, :), means(i, :), covs(:, :, i)); w = weights(i); % Save this the this probability to corresponding position in % the table % Note that the values computed here need to be normalized % later probTable(j, i) = p * w; end end % Normalize the probabilities we have just computed for i = 1 : length(probTable(:, 1)) total = sum(probTable(i, :)); for j = 1 : k probTable(i, j) = probTable(i, j)/total; end end % Maximization Step % Compute new mean, covariance matrix and weights for each Gaussian % model % We need to save current parameters for convergence checking tempWeights = weights; tempMeans = means; tempCovs = covs; for j = 1 : k pi = sum(probTable(:, j)); means(j, :) = zeros(1, dim); covs(:, :, j) = zeros(dim, dim); for i = 1 : num data = dataset(i, :); means(j, :) = means(j, :) + (probTable(i, j)/pi) * data; covs(:, :, j) = covs(:, :, j) + (probTable(i, j)/pi) * (data - means(j, :))' * (data - means(j, :)); end weights(j) = pi; end % Normalize the weights total = sum(weights); for i = 1 : k weights(i) = weights(i)/total; end % Check convergence threshold = 0.001; flag = 1; for j = 1 : k if (max(abs(tempWeights - weights)) > threshold) flag = 0; break; end if (max(abs(tempMeans - means)) > threshold) flag = 0; break; end if (max(abs(tempCovs - covs)) > threshold) flag = 0; break; end end if flag == 1 notConverge = 0; end % If iteration takes too long, we need to terminate it if iterCount > maxCount notConverge = 0; endend
% Now compute the probability density P(C = i Xj)probDens = zeros(num, k);
% This is P(C = i, Xj)for j = 1 : k for i = 1 : num probDens(i, j) = weights(j) * mvnpdf(dataset(i, :), means(j, :), covs(:, :, j)); endend
% This is P(C = i Xj)for i = 1 : num % This is P(Xj) total = sum(probDens(i, :)); for j = 1 : k probDens(i, j) = probDens(i, j)/total; endend
% Save the max value and their indices[maxVals, maxIDs] = max(probDens, [], 2);
% Begin plot the resultsfigure;
hold on;
for i = 1 : length(dataset) if maxIDs(i) == 1 plot(dataset(i, 1), dataset(i, 2), 'o', 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'r'); elseif maxIDs(i) == 2 plot(dataset(i, 1), dataset(i, 2), 'o', 'MarkerEdgeColor', 'g', 'MarkerFaceColor', 'g'); elseif maxIDs(i) == 3 plot(dataset(i, 1), dataset(i, 2), 'o', 'MarkerEdgeColor', 'b', 'MarkerFaceColor', 'b'); endend
hold off;
end

Monday, March 1, 2010

Statistical Learning Algorithm - Maximum Likelihood Estimation

Maximum Likelihood Estimation (MLE) is a statistical method used for estimating parameters of some statistical model that may be fitted for existing data. The idea behind MLE is simple: Given a set of observations, we need to choose the parameters that maximizes the likelihood that this statistical model produces these data.

1. General Ideas
Two cases, discrete and continuous populations, are involved in discussion. We only discuss the situation where X is a continuous variable; cases for discrete variables are basically very similar.
Assume X is a continuous variable, and it probability density function (PDF) is and X1, X2, ..., Xn are samples from the population. X1, X2, ..., Xn are independent and identically distributed (i.i.d.). Thus the cumulative probability density should be . When are fixed values, this is exactly the probability density at X1 = x1, X2 = x2, ..., Xn = xn; but when x1, x2, ..., xn are given, it becomes a function of . We call this new function likelihood function. The significance of is that it represents the likelihood of the given observations; as we have "observed" those data, then we need to maximize their probability through this function, i.e. we need to choose the parameters that maximize .

2. How to Compute MLE
Suppose we now have a group of observations X1, X2, ..., Xn, and we need to estimate those parameters that would maximize that likelihood function mentioned above. This is where the name "Maximum Likelihood Estimation" comes from. The log() is a monotonically increasing function, so we have:


To get parameters that maximize L is the same to maximize log(L). In most cases, it is much easier to do so. We compute derivatives of log(L) with respect to , and let them to be zero. Then we get the following:

This is called the system of likelihood equations. The solutions of the above equation system, if can be verified to maximize L, are exactly the parameters we need to get. Sometimes, the solutions may be multiple, so further steps is required to distinguish which solution gives the parameters we want.

Data Clustering Algorithm - K-means

K-means is a very basic but still very powerfull clustering algorithm. It aims to partition observations into k clusters in which each observation belongs to the cluster with the nearest distance. This is probably most widely used algorithm, compared to other machine learning techniques.

Intuitively, we now introduce major steps and some of their details in a simple K-means implementation.

Step 1: Initialization of K centroids

Centroid is a important concept here. The centroid is the center of one cluster. K-means is actually a iterative method. Centroids are updated through iterations, by computing the means of all current datapoints in one cluster. However, the initialization of centroids is very tricky, and will have a great impact on the clustering result. By default, the centroids are selected randomly from the datapoints in the given dataset. But various improvements are now available. Random, Forgy, MacQueen and Kaufman are four good examples. Discussions about them are available here.

Step 2: Assignment of datapoints to nearest centroids

In this step, we need to compute the distances from each datapoint to these K centroids. Based on these distance information, we assign a "nearest" centroid to each datapoint. The word "nearest" is quoted because another tricky thing will happen: what distance measure are we going to use? Again, the default measure is the euclidean distance. But this choice should depend on different situations. Some new distance measures like walk-based or ontology-based, etc are emerging for different needs.

Step 3: Update the centroids

After we have obtained these distance information (we can actually save them in a hash table or similar structure), we need to update the centroids. The new centroids are computed by taking the means of all datapoints in one "current" cluster. I put the word "current" because the clusters are changing all the time.

All we need to do now is to iterate these steps until the algorithm converges. Yes, it will, usually. The convergence properties are discussed here.

I have attached a matlab version of K-means algorithm here. It is a very simple implementation: random initialization and plain Euclidean distance are adopted. This is only for you to have a general concept of what this algorithm do.

-----------------K-means Algorithm - Matlab Implementation------------------


function [labels] = KMeansCluster(dataset, k)% This is a matlab version of a simple K-Means algorithm% 'dataset' is the data ready for cluster% 'k' is the number of clusters
% Dimension of each datapointdim = length(dataset(1, :));
% Number of datapoints in the given datasetnum = length(dataset);
% Initialize labels for datapointslabels = zeros(num, 1);
% Initialize centroids for this datasetcentroids = zeros(k, dim);
% Initialize k centroids% Default method - randomly choose k datapointscentIDs = randint(k, 1, num);for i = 1 : k centroids(k, :) = dataset(centIDs(i), :);end
% K-Means BeginnotConverge = 1;threshold = 0.001;maxIter = 1000;iterCount = 0;
while notConverge % Compute distances from each datapoint to these k centroids, and % assign each datapoint a cluster label % Create a table to save all intermediate distance information distTable = zeros(num, k); for i = 1 : num data = dataset(i, :); for j = 1 : k % Use simple Euclidean distance distTable(i, j) = pdist([data; centroids(j, :)], 'euclidean'); end end % Assignment Step [Y, labels] = min(disTable, [], 2); % Update Step % Compute new centroids % Save previous centroids for convergence checking tempCentroids = centroids; for i = 1 : k total = zeoros(1, dim); count = 0; for j = 1 : num if labels(j) == i total = total + dataset(j, :); count = count + 1; end end centroids(i, :) = total/count; end % Check convergence if max(abs(centroids - tempCentroids) < notconverge =" 0;" itercount =" iterCount"> maxIter break; endendend

龙应台:美国不是我们的家

按:我不知道为何那些讨论是否回国的帖子为何会思考的如此犬儒主义,作为要出国或已 出国的同学我们是不是把曾经重视的那些价值与责任给忘了。所以转载龙应台女士25年前 野火集里的一篇文章。愿意思考这类问题的就看一看吧!
----------------------------------------------------------------- 美国不是我们的家

我收到好几十封读者的来信。年长一点的说:"每看你的文章,心情激动难平,一再泪下 。"年轻一点的大学生写着:"在成为冷漠的社会人之前,请告诉我们:我们能为台湾这个 母亲做些什么?"更年轻的,高中生,说:"反正做什么都没有用:我大学毕业就要远走高 飞,到美国去!"  ※  ※ ※

少年人激动愤慨,老人家伤心落泪,绝对不是因为我的文章写得好。这一大叠情绪汹涌的 信件对有心人应该透露出两个问题:第一是事态本身的严重性;台湾生活环境的恶劣已经 不是知识分子庸人自扰的嚷嚷,而是市井小民身受的痛苦。第二是个人的无力感;如果这 个社会制度中有畅通的管道让小市民去表达他的意愿、去实现他的要求,他就不会郁积到 近乎爆炸的程度,就不需要凭靠区区几篇不起眼的文章来发泄他的痛苦。 第二个问题要比第一个还严重得多。因为环境再恶劣,难题再复杂,个人如果有适当的途 径去解决问题,觉得享有可为,他总是肯定的、理性的、乐观进取的。反过来说,即使问 题本身并不那么恶劣,但是个人觉得他的一切努力都是一条死巷,他的愤懑锁在堵塞的管 道中时,人,是会爆炸的。 半年前,有个爱看书的青年因为受不了隔邻女人早晚不断地诵经,冲进了她的屋子拿刀杀 她。暴力当然没有任何藉口,但是我们要追究原因:如果这个青年只要打一通电话,警察 就会来取缔噪音的话,这件凶杀案是不是可以避免?换句话说,假使这个青年一通一通电 话的哀求警察而警察不管,一次一次地劝告诵经的妇人而妇人不睬;那么,你说;他可以 搬家——别开玩笑了,台北什么地方可以让人安静度日?于是,日日夜夜受噪音的煎熬, 又丝毫没有改善的可能,他到底该怎么办?  ※  ※ ※

苏格拉底那个老头子被判了死刑之后,不愿逃狱,他说:"当我对一个制度不满时,我有 两条路:或者离开这个国家,或者循合法的途径去改变这个制度。但是我没有权利以反抗 的方式去破坏它。"(见《难局》,二月五日"人间") 不错,苏老头是个循规蹈矩的模范公民,但你是否注意到,做个好公民有两个先决条件: 首先,不肯妥协时,他有离开这个国家的自由;其次,这个国家必须供给他适当的管道去 改变他不喜欢的制度。也就是说,如果雅典政府既不许他离境,又不给予他改革的管道, 他就没有义务片面地做个循规蹈矩的公民。 那么我们的情况呢?台湾的生活环境恶劣,升斗小民所面临的选择与苏格拉底没有两样: 他可以离开台湾,但这有大多实际上的困难。他可以"循合法途径"去改变现状—— 我们有没有这个合法的途径、畅通的管道?  ※  ※ ※

一位医生来信叙说他痛苦的经历。住宅区中突然出现一个地下铁工厂,噪音与废气使整个 社区变色。他从私下的恳求到公开的陈情控告,无所不试,结果,等于零。这个机构说法 令不全,那个部门说不是他家的事,警察更说开工厂的人可怜!这位医生伤心绝望地问: "政府到底在做什么?法律究竟在保护谁?" 连十七岁的高中生都理直气壮地说:"反正没有用!我要到美国去!" 你不为我们的前途担忧吗? 这份绝望的无力感是谁造成的?  ※  ※ ※

许多人或许会把箭头指向政府——营建处、环保局、卫生署、警察局等等等,可是我不能 ,因为我的知识领域狭窄极了;我根本不知道垃圾有几种处理方式、食品进口要如何管制 、努力调动要如何分配。我不是专家,没有资格告诉这些在位做事的人怎么去做。 但是和你一样,我是个有充分资格的公民。无力感的根源或许是个鸡生蛋、蛋生鸡的问题 ;你或许觉得缺乏畅通的管道咎在政府,我却认为,你和我之所以有无力感,实在是因为 我们这些市并小民不懂得争取自己的权利,纵容了那些为我们做事的人。咎在我们自己。 大多数的中国人习惯性地服从权威——任何一个人坐在柜台或办公桌后面,就是一个权威 。我看见学生到邮局取款,填错了单子,被玻璃后的小姐骂得狗血喷头。这位学生唯唯诺 诺,惊恐万分。我也看见西装笔挺的大男人到区公所办事,戴眼镜的办事员冷眼一翻,挥 挥手:"去去去!都快十二点了,还来干什么?"大男人哈腰赔笑,求他高抬贵手。我更知 道一般的大学生,在面对一个拆"烂污"的老师时,不是翘课以逃避,就是附和以顺从。 到邮局取款,拿的是自己的钱,填错单子可以再填,学生为什么却觉得办事小姐有颐指气 使的权利?区公所的职员,不到钟点就理应办公,大男人为什么要哀求他?学生缴了学费 来求知识,就有权利要求老师认真尽职,为什么老师不做好,学生也无所谓? 所谓政府——警察局、卫生署、环保局——都是你和我这些人辛辛苦苦工作,用纳了税的 钱把一些人聘雇来为我们做事的。照道理说,这些人做不好的时候,你和我应该手里拿着 鞭子,睁着雪亮的眼睛,严厉地要求他们改进;现在的情况却主仆颠倒,这些受雇的人做 不好,我们还让他声色俱厉地摆出"父母官"的样子来把我们吓得半死,脑袋一缩,然后大 叹"无力"! 连自己是什么人都不知道,连这个主雇关系都没弄清楚,我们还高喊什么"民主、伦理、 科学"?  ※  ※ ※

每天清早,几万个衣履光洁的人涌进开往纽约市区的火车到城中上班。车厢内冬天没有暖 气,夏天冷气故障,走三步要抛锚两步,票价还贵得出奇。可是因为是垄断事业,所以日 复一日,年复一年,人人抱怨,人人还是每天乖乖地上车。一直到史提夫受不了了,他每 天奔走,把乘客组织起来,拒乘火车,改搭汽车。同时,火车一误点,就告到法庭去要求 赔偿。他跟铁路公司"吃不完,兜着走"。 史提夫没有无力感。  ※  ※ ※

安东妮十三岁的女儿被酒后驾车的人撞死了。因为是过失杀人,所以肇事者判的刑很轻, 但是安东妮只有一个不能复生的女儿,这个平凡的家庭主妇开始把关心的母亲聚集起来, 去见州长,州长不见,她就在会客室里从早上八点枯坐到下午五点,不吃午餐。两年的努 力下来,醉酒驾车的法令修正了,警察路检的制度加严了。别的母亲,或许保住了她们十 三岁的女儿。 安东妮也没有无力感。  ※  ※ ※

我并没有史提夫和安东妮的毅力。人生匆促得可怕,忙着去改革社会,我就失去了享受生 活的时间。大部分的时候,我宁可和孤独的梭罗一样,去看云、看山、看田里的水牛与鹭 鸶。不过,我们不做大人物,总可以做个有一点用的小人物吧?一个渺小的个人,如你, 如我,还是可以发光发热。过程会很困难,没错;有些人会被牺牲,没错。可是,在你没 有亲身试过以前,你不能说"不可能"!在你没有努力奋斗过以前,你也不能谈"无力感"。 问问史提夫,问问安东妮。 讲"道德勇气",不是可耻的事,说"社会良知",也并不肤浅。受存在主义与战乱洗礼的现 代人以复杂悲观自许,以深沉冷漠为傲;你就做个简单却热诚的人吧!所需要的,只是那 么一丁点勇气与天真。你今天多做一点,我们就少一个十七岁的说:"反正没有用,我到 美国去!" 美国,毕竟不是我们的家。 -- 最想要去的地方,怎能在半路就返航?

名妓、名媛和婊子

发信人: GGMM1977 (GGMM1977), 信区: WaterWorld标 题: 名妓、名媛、和婊子 (原创首发)发信站: BBS 未名空间站 (Thu Feb 11 13:40:23 2010, 美东)

谁也没想到,中国2010年最火爆的消息不是什么中美两国经贸纠纷,不是谷歌PK中国新闻检查,也不是海地大地震,甚至也不是丰田车出事,而是京城里最近闹出的那场名人之间的风波。 本人从来不看花边新闻,这一次眼球也给抓住了,可见这场风波之精彩出众,激烈非凡。
这场风波到底是婊子PK戏子,还是名旦PK名媛,现在公众还没有定论。 但从目前的爆料来看, 双方都不是什么清纯玉女,更不是妇道人家。 虽然谁胜谁负已经基本上见分晓了,但不能保证今后没有更精彩的爆料。 所以好戏还有得看。
要看戏至少要明白一场戏中的主要角色。 这场戏中的角色有些特殊。 为了搞清楚这些角色,本文介绍三个重要的概念:名妓、婊子、和名媛。
什么是名妓呢? 名妓本质上也是靠出卖肉体为生的妓女,只不过妓艺高超,达到了炉火纯青的地步,所以就被人们称为名妓。名妓首先必须是天生丽质,袅娜娉婷、楚楚依人,沉鱼落雁,闭月羞花,一笑倾城,二笑倾国,三笑城国颓倾。 有的时候,名妓还要精通房中之术,床第功夫一流,既可以把男人伺候得欲仙欲死,又不至于淫乱宫闱。 最后,名妓还要身手不凡,既会琴棋诗画, 又长袖善舞,知书达理。 总而言之,名妓是上得了龙床,下得了茅房的高级妓女。 中国历史上出了无数名妓,如苏小小、谢阿蛮、霍小玉、杜秋娘、柳如是、章台柳、刘婆惜、杜十娘、卞玉京、董小婉、陈圆圆、赛金花、小凤仙等等。 这其中不乏善良正直、忧国忧民的名妓。 旧时代妇女的命运不由自己掌握,坠入青楼多为生活、命运所逼。 但她们之中也有人良心未泯,利用自己的特殊身份干出惊天动地的大事的。 当然,这不过是名妓中的另类。 大多数名妓是永远不会有良心发现的,能不纵容她们的男人祸国殃民就很不错了。
什么是婊子呢? 咋一看婊子很像妓女,多半也是以卖X为生,但档次要低得多了。 婊子又名二奶、小三等。 其实,人们对于婊子有许多误解。 并不是所有和别人老公发生关系的女人都是婊子。 女人和别人的老公睡觉不外乎两个原因:(1)性爱的原始冲动 (2)为利益所驱动。 出于原始性爱的婚外情最多不过是太傻、太痴情或太骚,大不了是个骚女人而已,算不上婊子,况且多数情况下还是臭男人的错。 纯粹出于利益驱使和任何男人发生关系的女人,就是婊子了。 那么,婊子与妓女最大的区别是什么呢? 妓女出卖自己的肉体多半出于无奈,实在是走投无路了,只好坠入青楼。 这是被动的。 而婊子却常常是主动的。 婊子往往并不愁衣食,甚至有不错的收入。 但她们却可以随时随地把裤子一脱和任何可以给她们带来更大利益的男人上床,拿自己的肉体换取更多的利益, 她们是一群无耻的女人。 婊子和妓女的根本区别在于,妓女只卖肉而不卖心,婊子既卖肉也卖心。 一个女人被迫当上了妓女还有从良的可能性,但一个女人一旦当上了婊子,就彻底没救了。 所以,历史上有的名妓身在青楼心系江山社稷,有的名妓为爱殉情,但你有听说过任何一个婊子有过任何轰轰烈烈的壮举吗? 照我说,婊子不过是一群上得了官场,搅得乱情场的贱货。
但婊子再贱也是人。 虽然她们以卖X为荣,但她们心底里也知道自己有多贱。 被人们在背后指指戳戳的味道也不好受。 夜深人静之时她们也有烦恼。 几千年来,“既要当婊子,又要立牌坊”一直是婊子们的梦。 无奈中国社会越发展,婊子们的地位越低下。 1955年中国开天辟地实行了一夫一妻婚姻制,婊子们更步履维艰。
但是,到了公元21世纪,风水轮回转,婊子们解放了! 她们的梦想终于实现了! 突然间,婊子们成了被社会尊敬、羡慕又惧怕的一群高尚的女人。 谈论自己和人家的男人上床的经历已经成了中国社会婊子族的时髦。 今天的婊子可以堂堂正正地宣称“我爱我的先生,虽然我们没有结婚,但这并不妨碍我为他生一个孩子,孩子是我们爱情的结晶!”(尽管她那位先生法定是别人的) 。 “我爱他,我愿意为他生孩子,这碍着谁了?”成了中国公元2010年的最强音。 什么婚姻法,什么一夫一妻制,什么家庭观念,什么礼仪廉耻,统统成了不入时的垃圾。
京城的婊子一夜之间成了京城名媛。
什么是名媛? 名媛是出身而不是职业。 名媛一词出自于清代李渔的《风筝误•艰配》:“婵娟争觑我,我也觑婵娟,把帝里名媛赶一日批评徧。” 名媛就是上得了厅堂,出得了闺房的名门闺秀。大观园中的黛玉小姐是名媛,闺中的宋庆龄、宋美龄是名媛,袁淑祯、袁静雪是名媛,赵四小姐是名媛,蒋碧薇是名媛,吴健雄是名媛。 红色贵族中,洪晃她妈是名媛,林立果他姐是名媛,毛新宇他姑姑是名媛,李小琳马马虎虎也算半个名媛吧。
那京城的赵小三凭哪一条算是名媛?
名媛会做泼墨那种下三烂的事情的吗?
古时候,一个默默无闻的宫女被皇上临幸了,皇恩便开始浩荡到她的身上。 要是怀上了龙种,从此妾便以子贵,苦尽甜来。 那虽说不尽风流,但也还算是名正言顺,毕竟人家进宫是办了正式手续的。 如今一个三流戏子被一个过气老帅府里的什么人(反正是别人的丈夫)搞了几次,包了几年,弄出个私生子,居然摇身一变,成了京城富甲天下、呼风唤雨、兴风作浪的贵妇了。 今天就连京城的皇家御林军都要甘拜下风,为这贵妇冲锋陷阵,保驾护航。 而一向对花边新闻大开绿灯的中宣部这一次也破例管起了这件事,开始清理网上的传言了。 半个国家都在为这位小三效劳。 这什么狗屁世道! 啥玩意嘛。
以前皇帝的女儿敢这么凶吗? 不敢。 这位小三不就是一个睡人家男人, 拿人家点施舍,靠着人家的权势狐假虎威的高级婊子吗? 幸亏临幸她的不过是过气老帅府上的某人而已。 她要是早生几年,被先帝给看中,又被先帝临幸了,那她还不成了当今国母,三军女帅,我们都要高喊女皇万岁万万岁? 遗憾啊,差来差去就差了个名分,导致她名不正言不顺,以至于她再说她跟她“先生”都“结晶”了,却还是不敢公布她“先生”的尊姓大名。 尽管她身着DIOR的网眼连衣裙,用PIAGET的珠宝腕表衬出自己的风采,还是不能掩饰她的职业:小三,或者说婊子。 不过婊子能做到这个规模,这步田地,也算是出类拔萃了。 所以说她是个“国婊”应该比较贴切。
至于那个国际章,我提都不想提。 如今,在中国连做婊子都不是什么见不得人的事情了,她的那些事情还有什么好谈的。 即使没有这场风波,她也谈不上清纯二字。 她又不是不知道她“姐姐”的底细,可还是自己找上门去,白沾了一身骚。 就算人家是诬陷她,可诈捐那件事是铁板钉钉的吧。 更何况,假如她跟她“姐姐”合伙的生意要是做成了呢? 要是那些传闻千真万确呢? 那我们就对她刮目相看了。 那些事情如果是真,那她就不是国际章,而是国妓章了。 但尽管那样她还算不上是个名妓。 杜十娘、陈圆圆、赛金花、小凤仙会做出诈捐那种丧尽天良的事情吗? 不会的。 所以说,她充其量最多是个国妓。 反正这个国家逼良为娼又不是一天两天的事情了。
但是比起国婊赵,国妓章还是嫩了点。 这场风波后还是跟着姐姐学着点为好。
一个国婊要PK一个国妓,这样的新闻不火爆也难。

肖申克的救赎(觉得写的还不错)

发信人: freeman08 (自由自在), 信区: Wisdom标 题: 肖克莱的救赎观后发信站: BBS 未名空间站 (Tue Feb 23 14:53:31 2010, 美东)

昨天看了,很有意思,写一篇读后感,主要从社会运作的角度看。新开个主题。呵呵。如果是原来年轻时,看后可能主要会是愤怒,现在看了,有时候想笑。几个人物的命运,1.先说那个图书管理员,在监狱里呆了几十年,已经习惯了那样的生活,出来反而不习惯社会,最后只好自杀了。他也想再回到监狱里,回到旧有的习惯了的生活里去。不过可能也厌倦了,没有力量再做一次小案件以便回去,最后选择结束生命,他已经感受不到任何继续存在的价值。依赖于习惯,被惰性抓住,显然是我们人类的通性,当年美国解放黑奴,其实很多奴隶也是不习惯被解放的,因为解放后就要自己选择自己做决定了,没人可以依靠,不习惯。计划经济下出来的人,到市场经济中,要完全自己做主,也是不习惯。差别是有些人能克服习惯,有些人不能,就渴望回到老的习惯生活中去。克服习惯,找到方向,驾驭自己做master而不是slave,并不容易。这一点,可能每个人都有体会。要不为什么少人愿意当老板呢。

2. 下一个就是那个警官,一直都是一个强硬的角色出现的,打人毫不手软。最后被带走的时候,电影对白里说:那家伙哭的象个娘们儿。看国内刚解放剿灭土匪的案子,也有这种情况,当年那个胡传魁的原型,杀人不眨眼的家伙。被抓住的时候,也是瘫软到稀烂。当时的公安人员说,这好像是个通例,很多原来十分残暴的人,倒下的时候都是软的一塌糊涂。残暴和软弱大概都反应他们内心的自我疏离,被莫名的习惯力量所控制,两个极端表现其实都是失控的状态。可以算为病人。

3. 监狱长,精明算计,一切以自我的利益为出发点。某种程度上也追求荣誉和外界的赞扬。内心深处也有隐秘的冲突。其实社会上很多官僚是属于这样的人,在官僚体系运作中,冷酷无情,不惜牺牲别人的生命,来维护自己的“什么东西呢”,钱?地位?但他其实还是在乎社会评价,只不过社会评价价值体系对他来讲是个外在强加的东西。不明所以然。所以事发后,崩溃而自杀。自杀应该是内心冲突的表现。

4.那个黑人,一时冲动犯了罪,其实是有street smart的人。也有人情味,只是没受过教育。他一直基本是保持清醒的,或许是本来就没有太多虚幻的期待。几次假释面谈,很有点幽默,每次他试图顺着审问官的需要去说,总是reject.最后鼓足勇气直抒胸臆,反而approved.我边看边想,面试的时候要注意这个。不能让人觉得你故意在顺着他说。让人疑心你背后到底有什么。哈哈,幽默。

5.普通囚犯。基本上是属于认命的主流。朦胧中过日子,把命运交给别人管理。

6.主角Andy.这个人最有内容,所以放在最后。看完电影,想到一个名词:社会工程师。原来美国的律师就是社会工程师么。他们是理解美国社会(“法律社会”)的关键。打个比方说,就像电脑工程师知道系统哪里有bug一样,他们也知道这个社会是如何设计的,哪里有back door,如何可以建立档案和身份,信息如何流通。他知道那个税务系统、法律系统如何工作,6万块钱怎么才能免税。各种表格如何填写。看来他是深深明了这个社会是如何设计的,说起来律师们是属于立法者的一群,所谓社会的立法者,就相当于电脑的designer。他的水平类似现在的电脑黑客,知道如何钻社会体系的漏洞。(这一点我并非同意他的做法,不过现在能区分合理避税和钻漏洞的差别,合法和非法的差别了)。(实在说,我是计划经济长大,并受影响极深的人,在市场经济下,那个税务如何工作,就应该像学习电脑如何工作一样,要费心“自己学”的,这是最近才认识到。)从电影角色上讲,是立法者被司法者判了刑,又被执法者监管了起来,然后立法者又帮助执法者解决解法律、税务问题最可怜的是执法部门,监狱的狱卒,对法律系统基本茫然,因公配个枪,还要上税。让他干啥就干啥。相当于电脑打字员,电脑如何运作的,一片茫然。每天只要上班打字,或每天上班开车运囚犯就对了。就是这种社会背景下,主角因误判被抓进去了。Andy的最大特点是,有信心,有技术(知道系统如何运作),有智慧:知道这个系统有bug,而且知道必定会有bug。这是他后来能逃出去的基本个人素质要求。有信心,热爱生活和自由,所以他没有放弃。如果放弃了,就没后面的故事了。有技术,这强有力地支持了他的信心,因为技术,他才能在那个环境中通过帮助别人甚至是自己的敌人而有力地改善了自己的环境地位。有智慧,这个很重要。表现在他充分理解这个社会系统的设计是有bug的,这次一个故障把自己给卷进去了,并非完全不可接受。他没有把这个当成纯粹针对个人的事。也就是说He didn't take it personally. 就像一个电脑工程师发现自己设计的软件漏洞误扣了自己的钱一样,他基本是很冷静地接受了这个现实。哭是要哭,就像莎士比亚说的:我们出生时,因为降临到这个由笨蛋们设计的世界里而哭泣。但哭完后他就冷静了:妈的没办法,世界不完美。所以在开始的时候他并没有把那些警官甚至监狱长当成敌人。他充分了解人性弱点和制度的缺陷。了解缺陷,是智慧的起源。否则你碰到缺陷,就会气得要自杀了。我们崩溃是因为自认为不该发生的事情发生了,如果知道事情早晚会发生,当然就不会崩溃了。就像丘吉尔所说:“民主是个不好的制度,但是,还没有发现比它更好的制度,所以我们不得不用它”。实际上,丘吉尔的话,后面隐含了多少人类知识的结晶呢,多少代思想家哲人,日复一日,年复一年的探索,为什么要社会民主,要言论自由,三权分立,社会契约。当丘吉尔说那个话的时候,大概他们比较社会制度就像电脑高手比较操作系统一样,是有所根据和考量的。社会工程师的任务就是,面对现有的零件,你能设计一个什么系统,让大家运作地良好就是了。设计师一定要考虑,可用的零件都是不完美的个体。好了现在主角承认现实。今天我掉到坑里了,怎么生活下去,并想办法出去?
1.首先,在能保持尊严的时候,他一定尽量保持。比如跟那帮恶人打架。再入用自己的知识跟人换点啤酒招待大家。
2. 他骗了所有的人说,自己有个hobby:喜欢刻石头,那帮好心的囚犯还替他找石头呢。直到最后才知道,石头主要还是用来挖洞的吧。此属于处心积虑。之一。不能让人知道的事情就不能让任何人知道,此属于不得已,没办法。切切。
3. 不因系统的失误而惩罚自己,熄灭生命的火焰。所以他持续不停地申请图书馆建设。保持内心的不被玷污以及自身的活力。这个也很好,毕竟要活下去,即使是在监狱里。这还是要点热情的生命力的。这个要学习。
4. 不因自己的失误而惩罚自己,他充分意识到自己在妻子遇害这个事件中的影响,是他的个人当时情感的封闭,把妻子推到了别人那里,但也清醒知道自己不是凶手。所以没有陷入内疚的陷阱。很多人在他那种强烈的挫折下,会陷于内疚而不能自拔,自我惩罚。而他选择了一条正确的路,就是从此做正确的,而不是后悔以前的错误。这需要智慧,勇气,热情。值得学习。
5. 那个年轻人的到来,是个转折点,他先是充满希望地找到监狱长,没想到监狱长是那个反应,愚蠢!愚蠢?到那个年轻人因为可能作为证人而被杀害而自己也被关小黑屋1个月的时候,我产生了一定的绝望心理,不知道如何才能伸冤。设想过我如果在此情况下,能怎么做呢?趁着有外人参观的时候,跑上去伸冤申述?肯定不行,人家把你当成神经病,或者认为这就是普遍情况:谁不觉得自己冤?写信?他申请图书馆的信都是要通过监狱长送出去的。也没门。实际上正常的渠道已经堵死。这之后他又想明白了,妈的没办法,系统不完美,个体不仅仅是不完美,甚至是在执行错误的程序。这是智慧,他又冷静下来了。(设计台词,waichi在旁边说,赶快解脱吧,解脱了就没事了) 好像是从此他才开始挖洞。
6. 逃出去后,财务问题已经不成疑问了,知道他是个财务高手。不过还有个问题,真相怎么散布出去,我还想了不少时间,根据中国的经验,总觉得毫无出路。后来才看明白,毕竟人家是社会工程师,知道社会如何运作。那递给银行职员的包裹,大概都是寄给报社的。这反映了新闻自由是多么重要。没有新闻自由,黑幕更不知道要掩盖多久呢。所以这个电影让我意识到记者是干什么的,无冕之王原来有这个作用。还是好的。社会该有的功能还是有,虽然好多缺陷。你能指望什么呢,狱卒因公配个枪,还不知道自己该不该免税。社会成员都基本是这样的知识水平,能怎样呢?
7. 差点忘了这点,他在那个石头下面放上信和钱,还是很需要信心的。能克服对失望的恐惧而继续怀有希望。这很感人。
8. 结语。主人公是一个有技术,有智慧,热爱生活的人,生活在不完美的社会里而不忘追求自由。值得学习。人是不完美的,社会是有bug的,认识到这个社会是如何设计运作的,在绝望中寻求希望。如是。

--※ 修改:·freeman08 于 Feb 23 17:04:22 2010 修改本文·[FROM: 76.68.]※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 76.68.]