Bu elbise ne renk?

Bu elbise ne renk?

Birkaç gündür internet bu elbisenin ne renk olduğunu tartışıyor. insanların bir kısmı elbiseyi beyaz-altın renkte görürken, bir kısmı da mavi-siyah görüyor. Bu durumun neden kaynaklandigiyla ilgili pek çok argüman dolaşıyor etrafta. Bazıları aslında açıklamanın çok basit olduğunu iddia ederek, çeşitli argümanlar ileri sürüyor, ve bazıları da kendileri gibi algilamayan insanların gözlerinin bozuk olduğunu iddia ediyor. Bu kafa karıştırıcı durumun neden kaynaklandığını tamamen aciklamayasak da, beynimizin nasıl isledigiyle ilgili bildiklerimizin ışığında makul bir açıklama bulmak mümkün. Bu yazıda elimden geldiğince insanların bu elbisenin rengini neden farklı algıladığını anlamaya çalışacağım; bu çaba beynin nasıl çalistigiyla ilgili ilginç birkaç konuya deginmemizi de sağlayacak.

Öncelikle “bu elbise ne renk?” konusunda bildiklerimize bakalım. insanların elbisenin rengini nasıl algiladiklarinda keskin bir fark var. Bazıları beyaz-altın (ben de bunlardan biriyim), bazıları da mavi-siyah algılıyor. Bir algıdan diğerine zamanla geçen insanlar var. Örneğin önce beyaz-altın algılayan ancak bir süre sonra resme tekrar baktığında mavi-siyah görenler var. Ayrıca daha sonra tekrar beyaz-altın algısına dönmek de mümkün. ilginç noktalardan biri bu algıdan algıya geçişin istemsiz olması; isteyerek algısını degistirebileni ben daha duymadım. Ayrıca bu algı değişmesinin resme bakarken mümkün olup olmadığı tam belli değil. Ben şahsen resime bir süre bakmadiktan sonra tekrar baktıklarında algılarının değiştiğini söyleyen insanlar biliyorum; ancak, resime bakarken algının değiştiğini daha duymadım.

Neler olup bittiğini anlamaya çalışalım. Öncelikle beynimizin nasıl isledigiyle ilgili görece uzun bir süredir bildiğimiz ilginç bir gerçek var. Algilarimiz dış dünyada olup bitenlerin saf, katıksız birer kopyası değiller (zaten aksinin ne demek olduğu da çok açık değil). Beynimiz dış dünyadan akan bilgiyi deneyimleri ve amaçları doğrultusunda yorumluyor. Çoğu zaman dış dünyayı birden fazla şekilde yorumlamak mümkün ve beynimiz bu olası yorumlardan birisini seçiyor. Bunun en güzel örneklerinden birini aşağıdaki resimde görmek mümkün. Resimdeki daireleri nasıl algılıyorsunuz? Çukur mu, tümsek mi? Büyük ihtimalle soldaki daireleri çukur, ve sagdakileri tümsek olarak görüyorsunuz. Ama neden? Neden soldakileri tümsek, sagdakileri çukur olarak algilamiyorsunuz? İki yorum da olası. Örneğin ışığın üstten geldiğini varsayalım; bu durumda tumseklerin üst kısmı daha açık renkte ve altları koyu olacaktır. Çukurlar için de tam tersi. Bu varsayım altında soldaki daireler çukur, sagdakiler de tümsek olmalı. Ancak, ışığın alltan geldiği varsayımını yaparsak bunun tam tersi doğru. Algimiz soldakilerin çukur, sagdakilerin tümsek olduğu yönünde olduğu için beynimizin ışığın üstten geldiği varsayımını yaptığını söyleyebiliriz. Bu varsayım düşündüğümüzde çok da saçma değil. Temel ışık kaynağımız, güneş, hep yukarıda ve ışık bu nedenle çoğunlukla üstten geliyor. Dolayısıyla ışığın ne yönden geldiğiyle ilgili bir bilginin olmadığı durumlarda muhtelemelen yukarıdan geldiğini varsaymak aslında oldukça mantıklı gözüküyor. Özetlemek gerekirse beynimiz dış dünyayı belli varsayımlar doğrultusunda yorumlayıp olası yorumlardan en muhtemel bulduğu yorumu seçiyor. Bunun “bu elbise ne renk?” sorusuyla ne ilgisi var diyebilirsiniz. insanların neden aynı bilgiyi farklı şekilde yorumlayabileceginin farkına varmamız açısından önemli. İki farklı kişi tamamen aynı resime bakip farklı şeyler görebilirler.

Daireleri nasil goruyorsunuz? Cukur mu, tumsek mi?

Daireleri nasil goruyorsunuz? Cukur mu, tumsek mi?

Hikaye burada bitmiyor. Neden farklı algıların mümkün olduğunu açıklıyor bu konuştuklarımız, ama daha ayrıntılı bakarak renk algimiz konusunda ilginç birkaç şey daha görebiliriz. Aşağıdaki Rubik kübü resmine bir göz atın. Üst yüzdeki orta kare ile sol (bize yakin) yüzdeki orta karenin renkleri neler sizce? Üstteki kahverengi, soldaki turuncu değil mi? Eğer bu resmi bir resim işleme programında açıp o iki karenin rengine bakarsanız renklerin birebir aynı olduğunu göreceksiniz. Bunun güzel bir interaktif örneği şurada mevcut: http://www.lottolab.org/illusiondemos/Demo%2014.html. Su ana kadar konuştuklarımız doğrultusunda bunu anlamak zor değil. Beynimiz sol yüzün gölge altında olduğunu görerek oradan gözümüze gelen ışığın renginin gerçeğinden koyu olacağını hesaplıyor, ve gerçek rengini algılamak için gerekli düzeltmeyi yapıyor. Beynimizin nesnelerin rengini içinde bulundukları ortamdaki ışıktan (ne kadar az, çok ışık var örneğin) bağımsız olarak gerçek renklerinde algılamasına “color constancy” (renk sabitliği) deniyor. Bu örnekte de sol yüze daha az ışık düştüğünü görerek renkleri ışık miktarından bağımsız algılamak için gerekli düzeltmeyi yapıyor beynimiz. Zaten bu düzeltmeyi yapmasaydı çok da ise yarar bir görme duyumuz olmazdı. Güneşli bir günde dışarıdan, görece karanlık bir odaya girdiğinizi düşünün; eğer ışık miktarına adapte olamasaydik karanlıkta hiçbir şey goremezdik.

rubikillusion

Ust yuzde orta karenin rengi re? Sol (bize yakin) yuzdeki orta karenin rengi ne peki?

Aslında işler daha da ilginç. Beynimiz sadece ışık miktarına değil ışığın rengine göre de düzeltme yapıyor. Aşağıdaki resime bir göz atın. Şimdi size inanması güç bir şey söyleyeceğim. Sol kübün üst yüzündeki mavi karelerle sağ kübün üst yüzündeki sarı kareler aynı renkte! (Şuradan ikna olabilirsiniz: http://www.lottolab.org/illusiondemos/Demo%2012.html). Burada olup biten de yukarıdaki duruma benzer. Sol resimde ortamdaki ışığın sarı renkte olduğun gören beynimiz renklerde gerekli düzeltmeyi yapıyor; sağ resimde de aynı şekilde mavi renk için gerekli düzeltmeyi yapıyor.

Soldaki mavi karelerle sagdaki sari kareler ayni renkte!

Soldaki mavi karelerle sagdaki sari kareler ayni renkte!

Şimdi “bu elbise ne renk?” sorununu çözmeye çok yaklaştık. Elbisenin rengini beynimizin ortamdaki ışığın rengiyle ilgili yaptığı varsayım belirliyor. Eğer beynimiz ortamdaki ışığın mavi tonlarına yakın olduğunu varsayarsa resimde açık mavi olan kısımları beyaz olarak görüyoruz. Benzer şekilde eğer ışığın daha kırmızı tonlarına yakın olduğunu varsayarsa da açık mavi kısımları koyu mavi olarak görüyoruz. Burada ışığın rengi önemli olsa da daha basit bir şekilde anlamak için ışık miktarı yönünden de yorumlayabiliriz. Eğer beynimiz ortamda çok kuvvetli bir ışık olduğunu varsayarsa her şeyin olduğundan çok daha açık renkte görüneceğini düşünerek renkleri olduğundan koyu görecektir. Örneğin açık mavi kısımlar çok koyu mavi olarak gözükecek. Ama eğer ortamda az ışık olduğunu düşünürse renklerin olduklarından koyu gozukeceklerini düşünerek açık maviyi daha açık (beyaza yakın) algılayacak. Resime bakan kişinin istemsiz olarak yaptığı varsayımlara göre elbise beyaz-altın veya mavi-siyah gözüküyor. Yine beynimizin nasıl işlediğine geri dönerek, retinaya düşen resimin birden fazla farklı yorumu olduğunu ve beynimizin bunlardan birini yaptığı varsayımlar doğrultusunda seçtiğini söyleyebiliriz. Bu elbise resmi gibi iki farklı şekilde görünebilen resimlere “bistable” (çift-stabil) deniyor. Bunun en basit örneği aşağıdaki küp resmi. Burada iki farklı yorum mümkün. Kübün sol aşağı yönde ekrandan çıktığını görmek mümkün. Ayrıca sağ yukarı yönde ekrandan bize doğru geldiğini de görmek mümkün. Biraz çabayla bu iki yorum arasında geçiş yapabilirsiniz. (Daha çok bilgi için: http://en.wikipedia.org/wiki/Necker_cube). Elbise örneğinde de buna benzer bir durum söz konusu. Resmi görmenin birden fazla yolu var, ve beynimiz bunlardan birini seçiyor.

Necker kübü

Necker kübü

Gelelim “bu elbise ne renk?” sorununun tam da anlayamadığımız kısımlarına. Öncelikle insanların ışığın rengiyle ilgili çıkarımı nasıl yaptığını tam olarak bilmiyoruz. insanların farklı çıkarımlar yaptığını biliyoruz ama neden aynı resimde bazı insanların ışığın maviye yakın, diğerlerinin kırmızıya yakın olduğu sonucuna vardıklarını bilmiyoruz. Daha da ilginci, algimizi değiştirmek bu örnekte oldukça zor. Çoğu bistable resimde iki yorum arasında geçiş yapmak çok da zor değildir; ancak bu resimde ilginç bir şekilde oldukça zor (ben hala mavi-siyah görebilmiş değilim örneğin.). Bunun nedeni hafıza olabilir; bir kere belli bir yorumu seçtikten sonra tekrar resime baktığımızda ne gördüğümüzü hatırlıyor ve onu görüyor olabiliriz. Hafızanın algilarimiza olan etkisini bilimsel olarak uzun süredir biliyoruz. Bunun en güzel örneği su aşağıdaki resim bence. Eğer bu resmi daha önce görmediyseniz size büyük ihtimalle siyah-beyaz anlamsız bir resim gibi gozukuyordur. Resimin sağ alt köşesine doğru bir Dalmaçyalı köpek olduğunu söylesem. Dikkatli bakın. Görebildiniz mi? Bir kere gördükten sonra Dalmaçyalı size bariz gozukecektir. işin ilginci bundan sonra bu resmi ne zaman görürseniz hemen Dalmaçyalıyı da göreceksiniz. Resmi tekrar anlamsız bir siyah-beyaz kümeler bütünü olarak görmeniz olanaksız! Elbise durumunda da buna benzer bir şeyler olabilir. Bir kere beyaz-altın gördüğümüzde, bunu hatirliyor, ve resmi tekrar gördüğümüzde beyaz-altın yorumunu seçiyor olabiliriz. Bu, iki yorum arasında geçmenin neden bu kadar zor olduğunu açıklayabilir. Ama yine de insanların farklı yorumlar arasında geçiş yapabildiğini unutmamak gerek. Belki de resime tekrar baktıklarında içinde bulundukları ortam sebebiyle diğer varsayımı yapıp diğer yorumu seçiyor olabilirler.

dalmatian

Dalmaçyaliyi gördünüz mü?

Umarım “bu elbise ne renk?” sorunundaki gizemi az çok çözebilmisizdir beraber. Aynı resmin farklı kişiler tarafından (hatta aynı kişi tarafından farklı zamanlarda) farklı algılanabileceğini, beynimizin ortamdaki ışığa göre renklerde nasıl düzeltme yaptığını gördük. Tam olarak nasıl farklı yorumları seçtiğimizi ve bunlar arasında geçiş yaptığımızı anlayamasak da, konuştuklarımız ne olup bittiğini büyük ölçüde açıklıyor benim gözümde. Şahsen ben bu elbise resminin beynimizin nasıl çalistigiyla ilgili bu ilginç bilgileri paylaşmak için bahane olmasına sevinçliyim.

Not: Türkçe karakterlerin olmadigi bir klavyede yazdigim icin maalesef Türkçe karakterlerin bir kismini katletmek zorunda kaldim. Sonra internette otomatik düzelten araçlardan yararlandim, ama maalesef onlar da tamamen kotaramiyor bu isi. Kisacasi, kusura bakmayin Türkçe karakterleri katlettigim icin.

Resimler:

https://edge.org/response-detail/10594

http://en.wikipedia.org/wiki/Necker_cube

http://www.nature.com/nature/journal/v401/n6754/fig_tab/401650a0_F1.html

Rubik küp illüzyonu örnekleri: http://www.lottolab.org/articles/illusionsoflight.asp

Multiple Kernel Learning for Extracting Protein-protein Interactions

For this semester’s Bioinformatics course, I have applied various multiple kernel learning algorithms on extraction of protein-protein interactions from biomedical literature. Below is a more formal presentation of the project and you can also reach the report.

Determining if a protein interacts with another protein is quite important as it provides important clues in many research areas such as development of new drugs. One approach to PPI extraction relies on machine learning and natural language processing methods to learn models discriminating between positive and negative interactions based on linguistic features of sentences. In this project, we apply multiple kernel learning algorithms (rule based, alignment based and mkl by Bach et al.) on 3 kernels (shallow linguistic, subtree, k-BSPS) that use different linguistic features and analyze the results from accuracy and kernels’ importance perspective.

Report
Source code is available on request due to its large size.

Outlier Detection Toolbox in MATLAB

As a part of my M.Sc. thesis I have been developing an outlier detection toolbox in MATLAB.
Implemented methods are;

  • ActiveOutlier
  • Local Outlier Factor
  • Feature Bagging
  • Parzen Windows
  • Decision Tree

I will be providing more detail on the algorithms in a later post.
You can get the source code from my bitbucket account here, it includes a script that shows how to run the algorithms. I have also written a small document that gives more detail and explains the data set format. You can get the document from here.

Here is a link to my thesis if anyone is interested.

Mixture of Experts – C Implementation and Sparse Input Data

Recently, I’ve been working on classification of very high dimensional (input dimension ~150.000) and sparse data as a continuation of Artificial Neural Networks course project I’ve finished last semester. I’m currently experimenting with Mixture of Experts architecture to see if it produces better classification rates. As you can see in my last post, first I have implemented MoE model in MATLAB but I needed an implementation that performs faster so I ported my MATLAB code to C with a few additions. Since my focus was on sparse data where most of the input values are zero, I have implemented separate, optimized functions for training and testing with sparse input data.
Below you can see sample code to initialize, train and test MoE model with synthetic data I have generated for classification.

//      ClassifySyntheticData.c
//      
//      Copyright 2011 Goker Erdogan <goker@goker-laptop>
//      
//      This program is free software; you can redistribute it and/or modify
//      it under the terms of the GNU General Public License as published by
//      the Free Software Foundation; either version 2 of the License, or
//      (at your option) any later version.
//      
//      This program is distributed in the hope that it will be useful,
//      but WITHOUT ANY WARRANTY; without even the implied warranty of
//      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//      GNU General Public License for more details.
//      
//      You should have received a copy of the GNU General Public License
//      along with this program; if not, write to the Free Software
//      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
//      MA 02110-1301, USA.

#include "MoE.h"
#include <stdio.h>

int main( int argc, char **argv)
{
	int inputDim = 2;
	int outputDim = 2;
	int expertCount = 2;
	int trainCount = 600;
	int testCount = 400;
	int iterCount = 5;
	
	MoEType *moe = InitializeMoE( inputDim, outputDim, expertCount, COMPETITIVE, 0.1, 0.99 );
	
	double x[2];
	double rd;
	int r;
	
	FILE *tfp = fopen("trainMoE.txt","r");
	FILE *vfp = fopen("testMoE.txt","r");
	
	int i = 0;
	int n;
	int rc;
	int misclassified = 0;	
	while( i < iterCount )
	{
		i++;
		for ( n = 0; n < trainCount; n++ )
		{
			fscanf(tfp, "%lf %lf %lf\n", &x[0], &x[1], &rd);
			r = (int)rd;
			TrainOnlineD(moe, x, r, 0);		
		}
		
		misclassified = 0;	
		for ( n = 0; n < testCount; n++ )
		{
			fscanf(vfp, "%lf %lf %lf\n", &x[0], &x[1], &rd);
			r = (int)rd;
			rc = TestSample(moe, x);
			if ( rc != r )
			{
				misclassified++;
			}
		}
		
		printf("Iteration %d Classification Rate: %f\n", i, (testCount - misclassified) / (double)testCount);
	}
	
	fclose(tfp);
	fclose(vfp);	
	FreeMoE(moe);
	
	return 0;

}

You can find data structures and functions for MoE model, synthetic classification dataset and sample code given above in the source code which you can download here.